首页 > 解决方案 > 使用 JSON.stringify(queryObject) 时来自 mongoose js 的意外行为

问题描述

当我这样做JSON.stringify({theKey : 'some\thing'}时,结果将是:

{"theKey" : "some\\thing"}

但是queryObject从猫鼬查询返回,JSON.stringify(queryObject)不会添加第二个反斜杠,所以当我在另一端解析它时它会给我错误。谢谢

标签: javascriptjsonexpressmongoose

解决方案


我认为您将 JSON 的内部表示(可能来自控制台?)误解为 JSON。

\在定义的 JS字符串"中开始一个转义序列,'或者一个反引号,这意味着它后面的字符可能具有特殊含义。让 JS\在字符串中实际输出 a 。你需要两个斜线。

> console.log('\\')
\

JSON 编码需要使用\而不是文字制表符输出转义序列。这意味着内部表示有两个\\s。当您使用字符串时,它看起来没问题:

> console.log(JSON.stringify({theKey : 'some\thing'}))
{"theKey":"some\thing"}

具有特殊含义的转义序列是:

\0null
\b退格
\f换页符
\n换行符回车符 垂直制表
\t符unicode unicode
\r
\v
\xNN
\uNN
\"
\'

以下是内部表示和实际 JSON 输出之间差异的更多示例

> a = JSON.stringify("a\az")
'"aaz"'
> console.log(a)
"aaz"

> b = JSON.stringify("a\bz")
'"a\\bz"'
> console.log(b)
"a\bz"

> s = JSON.stringify("a\\z")
'"a\\\\z"'
> console.log(s)
"a\\z"

推荐阅读