如何在PostgreSQL中解析JSON

90
我有一个包含字符变量列和此列具有json的数据库表。 我需要编写一个查询,将这个json解析成单独的列。
我在这里找到了 json_each 函数但是我不知道如何使用它。

PostgreSQL自9.2版本开始支持原生JSON数据类型。 - WEBjuju
2个回答

149
我搞定了,伙计们。
假如我有一个名为books的表格, enter image description here 我可以轻松地编写查询。
SELECT 
   id, 
   data::json->'name' as name
FROM books;

它将导致

在此输入图片描述

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

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

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

在此输入图像描述


3
如果您使用的是足够新的Postgres版本,使用data::jsonb->'foo'将会稍微更加高效(对于json类型,每次访问元素时实际上会重新解析)。 - Dmitri
2
在这种情况下,您也可以使用 data::jsonb。只有在将其包装在子查询中并在外部查询中多次引用转换后的结果时,才能获得好处。 - Craig Ringer
13
如果你不想在字符串周围有双引号,请使用 data::json->>'name'。详见:https://www.postgresql.org/docs/current/functions-json.html - nunespascal
5
为了去掉引号,可以使用 trim('"' FROM (data::json->'name')::text) - Viktor Reinok
有没有解决方案可以处理不知道底层JSON blob结构的情况? - jayarjo

62

太棒了,谢谢分享。我发现你可以更深入地探索,比如:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接