我正在尝试更新postgres中的列表,但我不知道该怎么做...
我有一个表,该表有3列,例如昵称,颜色和json,这是一个字符串,该表有一个类似
的对象{"value1":"answer1", "value2":"answer2" }
在带有json的列上,我想添加昵称和颜色值...
赞:
{"value1":"answer1", "value2":"answer2", "nickname":"name1", "color":"red" }
如何进行此更新?
答案 0 :(得分:0)
如果您真的想从Postgres进行此操作,则可以尝试使用REGEXP_REPLACE
:
WITH cte AS (
SELECT '{"value1":"answer1", "value2":"answer2"}'::json AS col
)
UPDATE cte
SET col = REGEXP_REPLACE(col::text,
'\}$',
', "nickname":"name1", "color":"red"}')::json;
{"value1":"answer1", "value2":"answer2", "nickname":"name1", "color":"red"}
这种方法使用直接字符串操作来查找JSON字符串的结尾,然后插入新的键值对。
如果您使用的是Postgres 9.5或更高版本,则可能要使用merge ||
运算符来添加新的JSON内容。在最新版本中,Postgres对JSON操作的支持变得更好,但是9.4版的功能不多。
此外,如果您可以从Hibernate / JPA层处理此问题,则可能更有意义。
答案 1 :(得分:0)
如果要使用表的现有列,可以使用json_build_object
。
UPDATE t
SET json_col = ( replace(json_col :: text, '}', ',')
|| replace(Json_build_object ('nickname', nickname,
'color', color) :: text,'{', '' ) ) :: json ;
replace()
语句有助于调整json
字符串。请注意,这里我认为您的字符串是一个简单的json字符串(不带嵌套数组/ json)。