2014-09-01 64 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