我正在解析一个json
,并在它上面应用正则表达式。
{"value":"{\"123\":{\"type\":\"TAGGING\",\"role\":\"RESULT\",\"payload\":[{\"values\":{\"qbc\":\"not-abc\",\"def\":\"yes\",\"ghi\":\"gh\"}}]}}"}
Regexp used :
REGEXP_EXTRACT(JSON_EXTRACT_SCALAR(
Opfields,
'$.value'
),
'.*"abc":(.*?),',
1
) abc
现在这对abc有效,因为abc值后面有一个逗号,但对ghi无效。对于ghi,我知道在这个例子中我可以使用}。但问题是,abc、ghi等缩放器值可能以不同的顺序出现,在这种情况下,它可能以逗号或}结束。
我正在寻找一个表达式,它将在任何情况下工作,无论顺序是什么。本质上,我想要abc、def和ghi的值,不管它们以什么顺序出现在json中。
有人可以建议一个好方法来做到这一点。
我已经提到了我尝试过的regexp
1条答案
按热度按时间ruoxqz4g1#
你不需要在这里使用正则表达式,根据显示的数据,你似乎只有一个双重编码的JSON(即
value
包含一个JSON字符串,其中包含一个编码的JSON),因此您可以再次解析它并将其作为JSON处理。使用Presto(由于它有限的JSON路径支持),涉及到Map和数组的一些转换会有点麻烦:输出:
如果你真的在使用特里诺,你可以使用
json_query
: