【问题标题】:How to parse JSON in postgresql如何在 postgresql 中解析 JSON
【发布时间】:2015-09-17 08:54:42
【问题描述】:

我的数据库中有一个表,其中包含字符变化列,并且该列具有 json。我需要编写一个查询,它会以某种方式将此 json 解析为单独的列。

我找到了 json_each 函数 here,但我不明白如何使用它。

【问题讨论】:

  • PostgreSQL 从 9.2 版本开始支持原生 JSON 数据类型。

标签: json postgresql


【解决方案1】:

我想通了,伙计们

如果我有桌书

我可以轻松编写查询

SELECT 
   id, 
   data::json->'name' as name
FROM books;

这会导致

我也可以尝试获取不存在的列

SELECT 
   id, 
   data::json->'non_existant' as non_existant
FROM books;

这种情况下我会得到空结果

【讨论】:

  • 如果您使用的是最新版本的 postgres,使用 data::jsonb->'foo' 会稍微高效一些(使用 'json' 它实际上会为每个元素访问重新解析)。
  • @Dmitri 在这种情况下,data::jsonb 也可以。只有将其包装在子查询中并在外部查询中多次引用内部查询的转换结果时,您才会受益。
  • 如果您不想在字符串周围加上双引号,请使用 data::json->>'name'。 postgresql.org/docs/current/functions-json.html
  • trim('"' FROM (data::json->'name')::text) 删除引号
【解决方案2】:

太棒了,谢谢分享。我发现您可以更深入地了解:

SELECT 
   id, 
   data::json->'name' as name,
   data::json->'author' ->> 'last_name' as author
FROM books;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2011-06-28
    • 2021-09-06
    • 2018-07-23
    • 2018-07-13
    相关资源
    最近更新 更多