在postgresql中解析JSON的最佳方法

Iva*_*sul 20 postgresql json

我的数据库中有一个表,其中包含字符变量列,此列包含json.我需要编写一个查询,它将以某种方式将这个json解析为单独的列.

我在这里找到了json_each函数,但我无法理解如何使用它.

Iva*_*sul 35

伙计们,我想通了

如果我有桌子 在此输入图像描述

我可以轻松编写查询

SELECT 
   id, 
   data::json->'name' as name
FROM books;
Run Code Online (Sandbox Code Playgroud)

它会导致

在此输入图像描述

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

SELECT 
   id, 
   data::json->'non_existant' as non_existant
FROM books;
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我将得到空的结果

在此输入图像描述

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

hit*_*t3k 9

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

SELECT 
   id, 
   data::json->'name' as name,
   data::json->'author' ->> 'last_name' as author
FROM books;
Run Code Online (Sandbox Code Playgroud)