sql - Postgres:如何更改数组中每个元素的 jsonb 值类型?
问题描述
我在 Postgres 10.12 中有一个名为items的 jsonb 列,如下所示:
{
"items": [
{
"itemQty": 2,
"itemName": "snake"
},
{
"itemQty": 1,
"itemName": "x kodiyum"
}
]
}
现在我想将每个数组元素的itemQty类型转换为字符串,以便新值如下所示:
{
"items": [
{
"itemQty": "2",
"itemName": "snake"
},
{
"itemQty": "1",
"itemName": "x kodiyum"
}
]
}
我该怎么做呢?我已经浏览了 Postgres jsonb 的文档,但无法弄清楚。
在服务器端,如果有帮助,我将使用 Spring boot 和 Hibernate 以及 com.vladmihalcea.hibernate.type.json (Hibernate Types 52)。
谢谢
解决方案
您可以取消嵌套数组,修改元素,然后重新构建它。假设您的表的主键是id
,那将是:
select jsonb_build_object(
'items', jsonb_agg(
jsonb_build_object(
'itemQty', (x.obj ->> 'itemQty')::text,
'itemName', x.obj ->> 'Name'
)
)
)new_items
from mytable t
cross join lateral jsonb_array_elements(t.items -> 'items') as x(obj)
group by id
请注意,::text
此处并不真正需要显式转换为,因为->>
无论如何都提取文本值:我保留它是因为它使意图更清晰。
如果你想要一个update
声明:
update mytable t
set items = (
select jsonb_build_object(
'items', jsonb_agg(
jsonb_build_object(
'itemQty', (x.obj ->> 'itemQty')::text,
'itemName', x.obj ->> 'Name'
)
)
)
from jsonb_array_elements(t.items -> 'items') as x(obj)
)
推荐阅读
- c - va_arg(ap, unsigned int) 当参数为“有符号整数”时,反之亦然
- c++ - 如何从 C 调用 AWS CPP 开发工具包函数
- javascript - 如何单击 .class 随机 # 次
- python - 在索引上合并 Panda DataFrame,添加额外的列,并且没有重复的索引
- sorting - 如何过滤工作表以仅显示特定子字符串的一个实例?
- jestjs - 开玩笑 - 如何并行运行 .each
- google-oauth - Google OAuth 受限范围验证因错误原因被拒绝
- react-native - 如何从我的应用程序打开 facebook、instagram ..(社交网络)个人资料
- c++ - LINK 1104:无法打开文件“...test.exe”随机发生
- java - 如何通过单一声明获取当前用户信息?