JSONB 替换特定键的值 Postgresql
JSONB replace value of a specific key Postgresql
我需要替换 Postgresql 中 jsonb 对象中特定键的值:
create table content (
id int,
dynamic_fields jsonb
);
insert into content values (0, '{
"key1": "aaaaa text1",
"key2": "text1",
"key3": "blabla"}'::jsonb);
UPDATE content
SET dynamic_fields = replace(dynamic_fields::text, 'text1', 'text2')::jsonb;
此处的这段代码给出了以下结果:
id | dynamic_fields
0 | {"key1": "aaaaa text2", "key2": "text2", "key3": "blabla"}
我不想替换所有出现的“text1”,而是只想替换“key1”值内的文本:我该怎么做?
更新的结果应该是这样的:
id | dynamic_fields
0 | {"key1": "aaaaa text1", "key2": "text2", "key3": "blabla"}
更新了期望的结果,不够清楚。
您可以使用运算符||联系两个JSON数据并生成新的JSON数据。
现在我们可以使用 || 将旧的 JSON 数据连接到新的 JSON 数据(如:{"key2": "text2"}
)
update content
set dynamic_fields = dynamic_fields || '{"key2": "text2"}'::jsonb;
P.S:
此外,您可以使用jsonb_set
函数来更改数据。
update content
set dynamic_fields = jsonb_set(dynamic_fields, '{key2}', '"text2"');
update content
set dynamic_fields =
dynamic_fields ||
jsonb_build_object('key1', replace(dynamic_fields->>'key1', 'text1', 'text2'))
where dynamic_fields ? 'key1'
中测试
我需要替换 Postgresql 中 jsonb 对象中特定键的值:
create table content (
id int,
dynamic_fields jsonb
);
insert into content values (0, '{
"key1": "aaaaa text1",
"key2": "text1",
"key3": "blabla"}'::jsonb);
UPDATE content
SET dynamic_fields = replace(dynamic_fields::text, 'text1', 'text2')::jsonb;
此处的这段代码给出了以下结果:
id | dynamic_fields
0 | {"key1": "aaaaa text2", "key2": "text2", "key3": "blabla"}
我不想替换所有出现的“text1”,而是只想替换“key1”值内的文本:我该怎么做?
更新的结果应该是这样的:
id | dynamic_fields
0 | {"key1": "aaaaa text1", "key2": "text2", "key3": "blabla"}
更新了期望的结果,不够清楚。
您可以使用运算符||联系两个JSON数据并生成新的JSON数据。
现在我们可以使用 || 将旧的 JSON 数据连接到新的 JSON 数据(如:{"key2": "text2"}
)
update content
set dynamic_fields = dynamic_fields || '{"key2": "text2"}'::jsonb;
P.S:
此外,您可以使用jsonb_set
函数来更改数据。
update content
set dynamic_fields = jsonb_set(dynamic_fields, '{key2}', '"text2"');
update content
set dynamic_fields =
dynamic_fields ||
jsonb_build_object('key1', replace(dynamic_fields->>'key1', 'text1', 'text2'))
where dynamic_fields ? 'key1'
中测试