我正在尝试解析以下json数据并在where
子句下使用它。
Basic":{
"General":{
"Field1":1234,
"Field2":"6.86"
},
"Stream 0":{
"Type":"LDAP",
"Field4":"LALA1"
},
"Stream 1":{
"Type":"KERBEROS",
"Field4":"LALA2"
},
"Stream 2":{
"Type":"SAML",
"Field4":"LALA3"
},
我可以像这样到达Type
标签。
table.column_json::json->'Basic'->'Stream 0'->'Type'
Stream #
的顺序未定义且可能有超过3个Stream
标记。
如何遍历每个流并查找Type:
是"SAML"
,Field4
值是"LALA3"
。
答案 0 :(得分:1)
由于您要搜索多个不同的密钥,因此需要“解包”K / V对,然后进行字符串匹配:
SELECT DISTINCT t.*
FROM table t, json_each(t.column_json::json->'Basic') j(k, v)
WHERE j.k LIKE 'Stream%'
AND j.v->>'Type' = 'SAML'
AND j.v->>'Field4' = 'LALA3';
请注意json_each()
函数是PG9.3 +。