[英]How to extract key and value from json column in Postgres?
我想使用 Postgresql 將從 json 列中提取的鍵值對添加到表中。
我在 json 中有一個帶有 uid 和 data 列的 items_table 多對。 看起來像的初始表:
uid | data
1 | {"item1":"string1", "item2":"string2"}
2 | {"item2":"string3", "item5":"string1", "item7":"string5"}
3 | {"item1":"string3", "item4":"string1", "item6":"string8", "item5":"string5"}
4 | {"item1":"string4"}
...
因此,某些項目/字符串可以重復,字段長度也可以變化。
我嘗試應用文檔中提到的 jsonb_object_keys,但是出現錯誤。
select jsonb_object_keys(data)
from items_table;
錯誤:函數 jsonb_object_keys(字符變化)不存在提示:沒有函數匹配給定的名稱和參數類型。 您可能需要添加顯式類型轉換。
我想通過以下方式獲得表結果以按項目和字符串拆分,擴展 uid 列:
uid | items | strings
1 | item1 | string1
1 | item2 | string2
2 | item2 | string3
2 | item5 | string1
2 | item7 | string5
3 | item1 | string3
3 | item4 | string1
3 | item6 | string8
3 | item5 | string5
4 | item1 | string4
如何實現上述輸出?
您應該能夠提取鍵,然后提取值:
select key, v.j->key
from (values (1, '{"item1":"string1", "item2":"string2"}'::jsonb),
(2, '{"item2":"string3", "item5":"string1", "item7":"string5"}'::jsonb)
) v(id, j) cross join lateral
jsonb_object_keys(v.j) as key;
這是一個 db<>fiddle。
您可以使用json_each_text()
方法輕松地將jsonb
類型列拆分為兩個單獨的列:
select uid, (js).key as items, (js).value as strings
from
(
select uid, jsonb_each_text(data) as js
from tab
) q
或更直接地使用cross join
:
select uid, js.items, js.value as strings
from tab
cross join jsonb_each_text(data) as js(items)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.