Javascript JSON.parse解析JSON.stringify输出,但不解析字符串本身

Javascript JSON.parse解析JSON.stringify输出,但不解析字符串本身,javascript,json,parsing,Javascript,Json,Parsing,我刚在Chrome控制台上看到这个: JSON.stringify(({wat:"\""})) > "{"wat":"\""}" JSON.parse(JSON.stringify(({wat:"\""}))) > Object {wat: """} JSON.parse('{"wat":"\""}') > VM34235:1 Uncaught SyntaxError: Unexpected string in JSON at position 9(…) 截图: JSON.

我刚在Chrome控制台上看到这个:

JSON.stringify(({wat:"\""}))
> "{"wat":"\""}"
JSON.parse(JSON.stringify(({wat:"\""})))
> Object {wat: """}
JSON.parse('{"wat":"\""}')
> VM34235:1 Uncaught SyntaxError: Unexpected string in JSON at position 9(…)
截图:

JSON.parse
在传递
JSON.stringify({wat:\”“})
的输出时成功解析,但在尝试评估
JSON.parse({wat:“\”“}”)时抛出


我称之为骗局。

引号字符必须用两个反斜杠转义,如下所示:

JSON.parse('{"wat":"\\""}')
当只使用一个反斜杠进行转义时,
JSON.parse()
实际上会得到以下要解析的值:

{"wat":"""}

这当然是无效的JSON。

尝试添加两个反斜杠,如下所示。JS将\视为转义字符并忽略它。因此:

{wat:"\\""}

看看
'{wat:“\”“}”
的字符串值。这应该很清楚。
'{wat:“\”“}'==='{wat:“}';//true
,您需要转义反斜杠如果您查看控制台输出(
“{”wat:“\”“}”
),您可以看到该值不是有效的字符串文字,因为它不显示转义序列。否则它必须看起来像
“{\“wat\”:\“\\\”}“
。因此,不能简单地将输出复制并粘贴到字符串文本中。控制台显示的是字符串值。如果您在控制台中键入
'foo\nbar'
,这可能会变得更加明显。是的,我应该已经弄清楚了。我调试了一些代码,将一个字符串化的对象放入一个模板字符串中,然后对其进行了评估,并试图对其进行解析,这让我很困惑,以至于忘记了正确的转义……难道他不能再添加一些双QOUTE吗\"""