PostgreSQL json(b) - 将字符串转换为数组并更新字段

mxl*_*lse 4 arrays postgresql json sql-update jsonb

我在 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 -> text -> array -> json。欢迎提出建议)

但是现在如何用urlsjson 数组更新字段呢?也许我必须使用jsonb_set

kli*_*lin 5

用途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) 
Run Code Online (Sandbox Code Playgroud)