我正在使用PostgreSQL 9.5.14,并且在表中有一列,其中包含我需要解析其内容的JSON数组。
通过选择,我可以看到JSON的结构是这种类型:
SELECT rule_results from table limit 5;
结果:
[{"rule_key":"applicant_not_lived_outside_eu"},{"rule_key":"family_assets_exceed_limit"},{"rule_key":"owned_a_deed"}]
[]
[]
[{"rule_key":"family_category","details":"apply_with_parents_under_25"}]
[]
我无法创建SQL命令来提供 rule_key 键的值。
我试图使用PostgreSQL中json函数的文档来从中找到解决方案 https://www.postgresql.org/docs/9.5/functions-json.html
SELECT rule_results::json->'rule_key' as results from table;
这仅给我空值。
SELECT jsonb_object_keys(rule_results::jsonb) from table;
这会导致错误消息msg“ 无法在标量上调用jsonb_object_keys ”,这似乎意味着查询仅限于一行。
这看起来很简单,一个带有key:value对的数组,但是答案不知所措。我将不胜感激。
答案 0 :(得分:1)
可能有不同的解决方案。最终取决于您的期望。但是所有解决方案都将使用函数json_array_elements()。这会将每个元素扩展为一行。这样,您可以做任何您想做的事。
这将导致每个值一行:
SELECT
value -> 'rule_key'
FROM
data,
json_array_elements(rule_results)