2017-01-05 43 views
1

我有一個jsonb場PostgreSQL中有以下內容:PostgreSQL的JSON(二) - 轉換字符串數組和更新領域

{ "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

回答

2

使用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) 
+0

它運作良好。我只需要添加'WHERE jdata - >'object' - >'urls'不是NULL'。否則,這些行的空值爲json(或者在你的情況下爲jdata)。 – mxlse