JSON對象值I有一個具有內容與此類似一個Postgres表:提取密鑰,從在Postgres的
id | data
1 | {"a":"4", "b":"5"}
2 | {"a":"6", "b":"7"}
3 | {"a":"8", "b":"9"}
第一列是一個整數,第二個是一個JSON柱。
我希望能夠從JSON擴大了鍵和值因此結果是這樣的:
id | key | value
1 | a | 4
1 | b | 5
2 | a | 6
2 | b | 7
3 | a | 8
3 | b | 9
可這在Postgres的SQL可以實現嗎?
我已經試過
鑑於原始表可以模擬這樣:
select *
from
(
values
(1, '{"a":"4", "b":"5"}'::json),
(2, '{"a":"6", "b":"7"}'::json),
(3, '{"a":"8", "b":"9"}'::json)
) as q (id, data)
我可以用得到的只是按鍵:
select id, json_object_keys(data::json)
from
(
values
(1, '{"a":"4", "b":"5"}'::json),
(2, '{"a":"6", "b":"7"}'::json),
(3, '{"a":"8", "b":"9"}'::json)
) as q (id, data)
我可以將它們記錄爲這樣的記錄集:
select id, json_each(data::json)
from
(
values
(1, '{"a":"4", "b":"5"}'::json),
(2, '{"a":"6", "b":"7"}'::json),
(3, '{"a":"8", "b":"9"}'::json)
) as q (id, data)
但我不能解決如何使用id,key和value來實現結果。
任何想法?
注意:我正在使用的真正的json比這更嵌套,但我認爲這個例子很好地代表了我的潛在問題。
可能的重複[如何將postgresql 9.4 jsonb轉換爲沒有函數/服務器端語言的對象](http://stackoverflow.com/questions/27181980/how-to-convert-postgresql-9-4-jsonb-to -object-without-function-server-side-langu) – e4c5
使用函數'json_object_keys'或'json_each'作爲表,而不是列:'select id,j.key,j.value from my_table,json_each(data)j' – Abelisto
謝謝Abelisto。當然,我最終會得到一個完整的笛卡爾產品,而不是我正在尋找的表格,使用您建議的查詢? –