Postgres:在sql中解析JSON数据

时间:2016-04-29 16:31:37

标签: json postgresql

我正在尝试解析以下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"

1 个答案:

答案 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 +。