我有这个json,我想在sql中得到这部分:“100000007296871”
{"pixel_rule":"{\"and\":[{\"event\":{\"eq\":\"Purchase\"}},{\"or\":[{\"content_ids\":{\"i_contains\":\"1000000007296871\"}}]}]}"}
怎么做?这是json转储
8yoxcaq71#
你可以这样做:
SELECT ( ( ( ( ( '{"pixel_rule":"{\"and\":[{\"event\":{\"eq\":\"Purchase\"}},{\"or\":[{\"content_ids\":{\"i_contains\":\"1000000007296871\"}}]}]}"}'::json->>'pixel_rule' )::json->>'and' )::json->1 )::json->>'or' )::json->0->>'content_ids' )::json->>'i_contains';
但是您的输入有一点非常有趣,因为它包含多次嵌套在json中的json。
js5cn81o2#
一种方法是通过修剪对象的 Package 引号来平滑对象 pixel_rule 的值,然后去掉多余的反斜杠,并应用 json_array_elements 为了使用 #>> 具有相关路径以提取所需值的运算符:
pixel_rule
json_array_elements
#>>
SELECT json_array_elements ( json_array_elements( replace(trim((jsdata #>'{pixel_rule}')::text,'"'),'\','')::json -> 'and' ) -> 'or' )::json #>> '{content_ids,i_contains}' AS "Value" FROM tab
演示
gtlvzcf83#
我的选择是使用 regex “\d+”如果其他部分不是数字
regex
select substring('string' from '\d+')
3条答案
按热度按时间8yoxcaq71#
你可以这样做:
但是您的输入有一点非常有趣,因为它包含多次嵌套在json中的json。
js5cn81o2#
一种方法是通过修剪对象的 Package 引号来平滑对象
pixel_rule
的值,然后去掉多余的反斜杠,并应用json_array_elements
为了使用#>>
具有相关路径以提取所需值的运算符:演示
gtlvzcf83#
我的选择是使用
regex
“\d+”如果其他部分不是数字