将 json 个对象的数组转换为 json
Convert array of json objects into json
在 postgres 中 table 我有一些这种格式的 jsonb
[{"type": "pet", "animal": "cat"}, {"type": "farm", "animal": "cow","colour": "brown"}]
但是我想把它变成这种格式
{"cat": {"type": "pet", "animal": "cat"}, "cow" {"type": "farm", "animal": "cow", "colour": "brown"}
而且我无法弄清楚,也无法在互联网上找到任何拥有这种格式的 jsonb 的人。谁能解决这个问题?理想情况下,没有 "colour" 的 key/value 的数据集不会有 {"colour": null} 但根本不会有键 "colour"
我正在使用 postgres 9.6
这是一种通过取消嵌套 json 数组并将其重新聚合到一个对象中来工作的选项:
select x.new_js_col
from mytable t
cross join lateral (
select jsonb_object_agg(obj ->> 'animal', to_jsonb(obj)) new_js_col
from jsonb_array_elements(t.js_col) as x(obj)
) x(new_js_col)
这假设您在 table mytable
.
中有一个名为 js_col
的 jsonb 列
| new_js_col |
| :----------------------------------------------------------------------------------------------------- |
| {"cat": {"type": "pet", "animal": "cat"}, "cow": {"type": "farm", "animal": "cow", "colour": "brown"}} |
在 postgres 中 table 我有一些这种格式的 jsonb
[{"type": "pet", "animal": "cat"}, {"type": "farm", "animal": "cow","colour": "brown"}]
但是我想把它变成这种格式
{"cat": {"type": "pet", "animal": "cat"}, "cow" {"type": "farm", "animal": "cow", "colour": "brown"}
而且我无法弄清楚,也无法在互联网上找到任何拥有这种格式的 jsonb 的人。谁能解决这个问题?理想情况下,没有 "colour" 的 key/value 的数据集不会有 {"colour": null} 但根本不会有键 "colour"
我正在使用 postgres 9.6
这是一种通过取消嵌套 json 数组并将其重新聚合到一个对象中来工作的选项:
select x.new_js_col
from mytable t
cross join lateral (
select jsonb_object_agg(obj ->> 'animal', to_jsonb(obj)) new_js_col
from jsonb_array_elements(t.js_col) as x(obj)
) x(new_js_col)
这假设您在 table mytable
.
js_col
的 jsonb 列
| new_js_col | | :----------------------------------------------------------------------------------------------------- | | {"cat": {"type": "pet", "animal": "cat"}, "cow": {"type": "farm", "animal": "cow", "colour": "brown"}} |