Postgres导出JSON时如何让Description字段值不被双引号包裹
解决Postgres导出JSON时Description字段被双引号包裹的问题
问题核心是你用FORMAT拼接出来的是文本字符串,而非原生JSON对象类型,所以导出时Postgres会将其作为普通字符串值处理,自动添加双引号。正确做法是用Postgres原生的JSON构造函数生成JSON对象,而非手动拼接字符串。
修改后的查询语句
导出单条记录为JSON对象
SELECT row_to_json(t) FROM ( SELECT uuid AS "Id", json_build_object('Fr', description, 'En', '') AS "Description", othercolumn AS "Otherstuff" FROM MyTable ) t;
导出所有记录为JSON数组
SELECT json_agg(row_to_json(t)) FROM ( SELECT uuid AS "Id", json_build_object('Fr', description, 'En', '') AS "Description", othercolumn AS "Otherstuff" FROM MyTable ) t;
关键说明
json_build_object('Fr', description, 'En', '')会直接生成JSON对象类型,而非字符串,因此在最终导出的JSON中,这个字段会以原生JSON对象的形式存在,不会被双引号包裹。- 如果你需要使用
jsonb类型(Postgres的二进制JSON类型,性能更优),可以将json_build_object替换为jsonb_build_object,row_to_json替换为row_to_jsonb,json_agg替换为jsonb_agg。 - 原生JSON构造函数会自动处理
description字段中的特殊字符(比如双引号、反斜杠),避免手动拼接字符串导致的JSON语法错误,安全性和可靠性更高。
内容的提问来源于stack exchange,提问作者poudigne
相关产品推荐
相关产品推荐

