如何重命名 jsonb 列表中的键?
How to rename a key in a jsonb list?
我正在尝试重命名列表中所有对象的 json 键,例如给定 my_table
,其中 my_col
包含一个 jsonb 列表:
[{name:0}, {name:1}, {name:2}]
我已经弄清楚如何通过使用显式索引删除和添加键来更改列表的单个元素,例如
select (my_col->0)::jsonb - 'name' ||
jsonb_build_object('new_name', my_col->0->'name')
from my_table
但是如何将其应用于列表中的所有元素?
这是迄今为止我使用横向连接的最佳答案。
update my_table t1
set my_col =
(select json_agg(el::jsonb - 'name' || jsonb_build_object('new_name', el->'name'))
from my_table t2, jsonb_array_elements(t2.my_col) as el
where t1.id = t2.id)
理想情况下,只会有一些简洁的模式匹配运算符,例如my_col->*->'name'
.
我正在尝试重命名列表中所有对象的 json 键,例如给定 my_table
,其中 my_col
包含一个 jsonb 列表:
[{name:0}, {name:1}, {name:2}]
我已经弄清楚如何通过使用显式索引删除和添加键来更改列表的单个元素,例如
select (my_col->0)::jsonb - 'name' ||
jsonb_build_object('new_name', my_col->0->'name')
from my_table
但是如何将其应用于列表中的所有元素?
这是迄今为止我使用横向连接的最佳答案。
update my_table t1
set my_col =
(select json_agg(el::jsonb - 'name' || jsonb_build_object('new_name', el->'name'))
from my_table t2, jsonb_array_elements(t2.my_col) as el
where t1.id = t2.id)
理想情况下,只会有一些简洁的模式匹配运算符,例如my_col->*->'name'
.