json - PostgreSQL 转义 JSON 字符串

标签 json postgresql

我正在尝试使用 PostgreSQL 9.3 中的新 JSON 功能,并且我正在寻找一个对 JSON 进行转义的函数,to_json(anyelement) 的反义词。

下面是一个示例 JSON:

{"single_comment": "Fred said \"Hi.\"" , 
"comments_array": ["Fred said \"Hi.\"", "Fred said \"Hi.\"", "Fred said \"Hi.\""]}  

查询:

SELECT json_array_elements(json_column->'comments_array')

如文档中所述返回一组 JSON。

"Fred said \"Hi.\""
"Fred said \"Hi.\""
"Fred said \"Hi.\""

有没有办法对结果进行转义,这样我就可以得到如下结果:

Fred said "Hi."
Fred said "Hi."
Fred said "Hi." 

在文档中我没有看到任何可以帮助我的函数。不幸的是,安装 PLV8 对我来说不是一个选择。

非常感谢任何想法。

最佳答案

在其他网站上找到一些简单的东西: 来源here

链接失效的详细信息:

select (ingredients #>> '{}')::jsonb->>'cheese' from pizza;

这样做☝️。当你有一个带有 jsonb 列(成分)的表(披萨)时,你不小心将转义的 JSON 字符串而不是 JSON 对象放入该列中。该值可能如下所示:

"{\"cheese\": \"mozzarella\"}"

看到报价了吗?这只是该 JSON 列内根级别的一个字符串。但你真正想要的是这样的:

{"cheese": "mozzarella"}

这样更好。但是我们已经犯了错误,所以我们必须编写一个迁移来修复数据。以下是我们的做法:

(ingredients #>> '{}')::jsonb

Postgres 中的 #>> 运算符获取“指定路径处的 JSON 对象作为文本”(PostgreSQL: Documentation: 9.3: JSON Functions and Operators)。这里我们传入一个空路径,表示我们希望 Postgres 在根级别为我们提供未转义的字符串作为 text 值。

然后我们可以像这样将该 text 值转换回 JSON:(stand-in-for-text-value)::jsonb。然后我们在根级别有一个正常的、解析的 JSON 对象,我们可以从中选择字段。

关于json - PostgreSQL 转义 JSON 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19414361/

相关文章:

c# - 无法使用 Newtonsoft 反序列化 json

json - Scala和Elasticsearch的潜在性能问题

sql - 有什么方法可以使用 select 语句生成 postgres 注释吗?

sql - 错误 : more than one row returned by a subquery used as an expression

node.js - Express Sequelize 和 Passport.js 身份验证策略不起作用

c# - 如何将新的 MediaType 添加到 ASP.Net WebApi 使用的 MediaTypeFormatters?

javascript - 反向 json javascript

javascript - 如何读取json并在html中显示

sql - postgresql 不返回特定数字标准的值

mysql - SQL,如何测试并发事务