【问题标题】:How can I parse JSON arrays in postgresql?如何在 postgresql 中解析 JSON 数组?
【发布时间】:2019-05-20 08:47:18
【问题描述】:

我使用的是 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-functions 的文档来找到解决方案 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;

这会导致错误消息“cannot call jsonb_object_keys on a scalar”,这似乎意味着查询仅限于单行。

这看起来很简单,一个包含键:值对的数组,但不知何故,答案让我难以理解。我将不胜感激。

【问题讨论】:

  • 您期待什么结果?一行中的每个值?一个数组中的所有值?
  • 我希望能够在一行中包含每个值。目前我正试图弄清楚如何获取数组内的密钥对。

标签: arrays json postgresql


【解决方案1】:

demo: db<>fiddle

不同的解决方案是可能的。这取决于您最终的期望。但所有解决方案都将使用函数 json_array_elements()。这会将每个元素展开为一行。有了它,你可以做任何你想做的事情。

这导致每个值一行:

SELECT 
    value -> 'rule_key'
FROM
    data,
    json_array_elements(rule_results)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-09
    • 2012-01-02
    • 2016-12-16
    • 2016-09-03
    • 2013-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多