2014-09-01 66 views
1

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

是否有解决方案?我期望它与这个查询一起工作:

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

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

我阅读了文档(http://www.postgresql.org/docs/9.3/static/functions-json.html),但找不到有用的东西。

非常感谢您的帮助!

+0

显示的JSON值 – 2014-09-01 12:13:42

+2

你得到一个错误?或者它究竟不工作? – Bulat 2014-09-01 12:25:41

+0

当您提出问题时,请提供表格定义,样本数据和预期结果。否则这是太多的猜测。 – Bulat 2014-09-01 12:39:11

回答

1

我试图json_array_elements()功能适用于VARCHAR和文本字段的作品,它不工作:

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

但是,它似乎与JSON类型正常工作。见SqlFiddle: http://sqlfiddle.com/#!15/2977f/3

因此,所有你需要做的是你的领域转换为JSON数据类型: http://sqlfiddle.com/#!15/0fa19/1

+0

谢谢!这是一个问题。我使用Doctrine与数据库进行通信,字段类型是文本,而不是json。我刚把它改成json,它工作正常。 – kpotehin 2014-09-01 13:12:33

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] 
+0

试一试吧 – Bulat 2014-09-01 12:24:36

+0

@Bulat现在呢? – 2014-09-01 12:29:31

+0

真正的桌子怎么样? – Bulat 2014-09-01 12:31:36