PostgreSQL json(b) - 将字符串转换为数组并更新字段
PostgreSQL json(b) - Convert string to array & update field
我在 PostgreSQL 中有一个 jsonb 字段,内容如下:
{ "object": { "urls": "A;B;C" } }
我想要做的是更新对象内部urls
的值,并将以分号分隔的值的字符串转换为JSON数组。所以结果应该是这样的:
{ "object" : { "urls": ["A", "B", "C"] } }
我找到了如何获得 JSON 数组。使用
to_json(string_to_array(replace((json->'object'->'urls')::text, '"',''), ';'));
给我 ["A", "B", "C"]
(我认为应该有更好的方法 无需转换 json -> 文本 -> 数组 -> json .欢迎提出建议)
但是现在如何使用 json 数组更新 urls
字段?可能我必须使用 jsonb_set
?
使用jsonb
和函数jsonb_set()
:
create table my_table(id int primary key, jdata jsonb);
insert into my_table values
(1, '{ "object": { "urls": "A;B;C" } }');
update my_table
set jdata = jsonb_set(
jdata,
array['object', 'urls'],
to_jsonb(string_to_array(replace((jdata->'object'->'urls')::text, '"',''), ';'))
)
returning *;
id | jdata
----+-------------------------------------
1 | {"object": {"urls": ["A", "B", "C"]}}
(1 row)
我在 PostgreSQL 中有一个 jsonb 字段,内容如下:
{ "object": { "urls": "A;B;C" } }
我想要做的是更新对象内部urls
的值,并将以分号分隔的值的字符串转换为JSON数组。所以结果应该是这样的:
{ "object" : { "urls": ["A", "B", "C"] } }
我找到了如何获得 JSON 数组。使用
to_json(string_to_array(replace((json->'object'->'urls')::text, '"',''), ';'));
给我 ["A", "B", "C"]
(我认为应该有更好的方法 无需转换 json -> 文本 -> 数组 -> json .欢迎提出建议)
但是现在如何使用 json 数组更新 urls
字段?可能我必须使用 jsonb_set
?
使用jsonb
和函数jsonb_set()
:
create table my_table(id int primary key, jdata jsonb);
insert into my_table values
(1, '{ "object": { "urls": "A;B;C" } }');
update my_table
set jdata = jsonb_set(
jdata,
array['object', 'urls'],
to_jsonb(string_to_array(replace((jdata->'object'->'urls')::text, '"',''), ';'))
)
returning *;
id | jdata
----+-------------------------------------
1 | {"object": {"urls": ["A", "B", "C"]}}
(1 row)