【问题标题】:Unexpected behavior from mongoose js when using JSON.stringify(queryObject)使用 JSON.stringify(queryObject) 时来自 mongoose js 的意外行为
【发布时间】:2021-08-28 21:30:08
【问题描述】:

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

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

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

【问题讨论】:

  • 结果将是 `{"theKey" : "some\\thing"},但带有 ...
  • 如果你把代码部分反引号` `它会被高亮显示
  • 你看到额外的` when inspecting in a REPL or the console? It's not actually in the JSON. The JSON value is also "some\thing"`

标签: javascript json express mongoose


【解决方案1】:

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

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

> console.log('\\')
\

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

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

有特殊含义的escape sequences是:

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

这里有更多关于内部表示和实际 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"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-10
    • 2015-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-13
    • 1970-01-01
    相关资源
    最近更新 更多