查询PostgreSQL中的JSON字段

时间:2014-09-01 12:07:37

标签: sql json postgresql

我有一个包含多个字段的表(id,title,json_field)。我想从这个表中选择所有行,但我希望json_field中的每个参数都是结果中的一个单独的行。我想我应该使用json_array_elements,但问题是我无法理解如何将其包含在我的查询中。

有解决方案吗?我希望它能与这个查询一起使用:

select id, title, json_array_elements(json_field) from table_name,但它没有。

我也尝试将子查询结果作为参数传递,但也没有成功。

我仔细阅读了文档(http://www.postgresql.org/docs/9.3/static/functions-json.html),但我找不到任何有用的信息。

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

为我工作

select 1, 2, json_array_elements('[1,true, [2,false]]');
 ?column? | ?column? | json_array_elements 
----------+----------+---------------------
        1 |        2 | 1
        1 |        2 | true
        1 |        2 | [2,false]

也适用于表格

select id, title, json_array_elements(j) as j
from (values
    (1, 'the title', '[1,true, [2,false]]'::json)
) s(id, title, j);
 id |   title   |     j     
----+-----------+-----------
  1 | the title | 1
  1 | the title | true
  1 | the title | [2,false]

答案 1 :(得分:1)

我尝试将json_array_elements()函数应用于VARCHAR和TEXT字段,但它不起作用:

  

提示:没有函数匹配给定的名称和参数类型。您   可能需要添加显式类型转换。

但是,它似乎可以正常使用JSON类型。见SqlFiddle: http://sqlfiddle.com/#!15/2977f/3

所以你需要做的就是将你的字段转换为JSON数据类型: http://sqlfiddle.com/#!15/0fa19/1