PostgreSQL中如何将JSON列内的JSON字符串转为合法JSON对象?
解决JSON列中带引号转义字符串转为合法JSON对象的问题
你的问题出在:虽然列类型是JSON,但里面存的是被引号包裹、带转义符的字符串形式JSON,to_json()函数仅负责将输入值转换为JSON类型,不会解析这个字符串内部的结构,所以执行后值不会变化。
正确的处理步骤:
先验证转换结果(避免直接更新出错):
SELECT your_column::text::json FROM your_table LIMIT 5;执行后如果返回不带引号和转义符的合法JSON对象(比如
{"a":1,"b":2,"c":3}),就可以继续下一步。执行更新语句:
UPDATE your_table SET your_column = your_column::text::json;
如果你的列是JSONB类型,把语句里的json替换为jsonb即可:
UPDATE your_table SET your_column = your_column::text::jsonb;
原理:your_column::text会把JSON列中存储的带转义的字符串提取为纯文本,再通过::json(或::jsonb)将该文本解析为真正的JSON对象,自动去除外层引号和内部转义符。
内容的提问来源于stack exchange,提问作者Alexander Hörl
相关产品推荐
相关产品推荐

