小编use*_*043的帖子

更新Postgres中的json字段

通过json字段查询Postgres 9.3非常棒.但是我找不到更新json对象的正式方法,为此我使用plpythonu编写的内部函数基于之前的帖子(如何修改新的PostgreSQL JSON数据类型中的字段?):

CREATE OR REPLACE FUNCTION json_update(data json, key text, value json)
RETURNS json AS
$BODY$
   from json import loads, dumps
   if key is None: return data
   js = loads(data)
   js[key] = value
   return dumps(js)
$BODY$
LANGUAGE plpythonu VOLATILE
Run Code Online (Sandbox Code Playgroud)

当我的json更新保持扁平和简单时,它的效果非常好.假设"聊天"是在"GO_SESSION"表中提交的json类型,并包含{"a":"1","b":"2"},以下代码将更改"b"值并将"chat"更改为是{"a":"1","b":"5"}

update "GO_SESSION" set chat=json_update(chat,'b','5') where id=3
Run Code Online (Sandbox Code Playgroud)

问题是当我试图给'b'另一个对象而不是一个简单的值时:

update "GO_SESSION" set chat=json_update(chat,'b','{"name":"steve"}') where id=3
Run Code Online (Sandbox Code Playgroud)

数据库中的结果是'b'包含转义字符串而不是真正的json对象:

{"a":"1","b":"{\"name \":\"steve \"}"}

我已经尝试了不同的方法来unescape或转储我的json以保持'b'为对象,但找不到解决方案.

谢谢

python postgresql json

9
推荐指数
1
解决办法
5133
查看次数

标签 统计

json ×1

postgresql ×1

python ×1