json - 向 JSONB 中的嵌套 JSON 数组添加新字段
问题描述
我有一个存储在 PostgreSQL 表中的嵌套 JSON 结构。
表users
:
id | content [JSON]
JSON:
{
"purchases": [
{
"id": 1,
"costs": [
{
"amount": 23
},
{
"amount": 34
}
]
},
{
"id": 2,
"costs": [
{
"amount": 42
}
]
}
]
}
我想为数组"jsonClass": "Static"
中的所有对象添加一个字段,costs
所以最后我有以下内容:
{
"purchases": [
{
"id": 1,
"costs": [
{
"jsonClass": "Static",
"amount": 23
},
{
"jsonClass": "Static",
"amount": 34
}
]
},
{
"id": 2,
"costs": [
{
"jsonClass": "Static",
"amount": 42
}
]
}
]
}
我不知道如何为这样的嵌套结构添加值。任何人都知道如何实现这样的事情?我发现的唯一方法是将其设为文本并进行字符串替换,这不是很高效,而且我有很多这样的条目。
解决方案
不幸的是,由于必须更改多个子对象,我不知道比解构然后重建对象更好的方法。它变得非常多毛。
UPDATE users
SET content=(
SELECT jsonb_agg(purchase)
FROM (
SELECT jsonb_build_object('id', pid, 'purchases', jsonb_agg(cost)) AS purchase
FROM (
SELECT pid, cost || '{"jsonClass":"static"}'::jsonb AS cost
FROM (
SELECT purchase->'id' AS pid, jsonb_array_elements(purchase->'costs') AS cost
FROM jsonb_array_elements(content::jsonb->'purchases') AS purchase
) AS Q
) AS R
GROUP BY pid
) AS S
);
编辑:对不起所有的编辑,忘记测试多行。现在应该好了。可能会简化一点,不确定。
推荐阅读
- java - com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException: 404 Not Found for https://tax.ocgov.com/includes/jquery-2.2.3.min.js
- python-3.x - 试图在 selenium 中获取 xhr 响应内容
- c - 即使使用 fflush,printf 也无法正常工作
- javascript - 使用 ES6 导入/导出时 nodejs 中“this”的含义
- python - python中带有雅可比矩阵的7自由度逆运动学
- xamarin.forms - Xamarin Forms Animation MVVM 方式
- javascript - 如何模拟输入nodejs cli脚本
- python - 我的 Seaborn 箱线图数字不在正确的图表上
- flutter - 配置根项目“file_picker”时出现问题。未找到 SDK 位置
- sql - 在sql中一次连接多个表