console.log(JSON.parse('{"data":"{\"json\":\"rocks\"}"}'));
给出错误(在 Firefox 和 Chrome 的控制台上测试)。这是 JSON.parse 的错误吗?使用 PHP 测试时,相同的解码效果很好。
print_r(json_decode('{"data":"{\"json\":\"rocks\"}"}', true));
console.log(JSON.parse('{"data":"{\"json\":\"rocks\"}"}'));
给出错误(在 Firefox 和 Chrome 的控制台上测试)。这是 JSON.parse 的错误吗?使用 PHP 测试时,相同的解码效果很好。
print_r(json_decode('{"data":"{\"json\":\"rocks\"}"}', true));
这个字符串在 PHP 和 JS 中的处理方式不同,即你得到不同的结果。
PHP 中单引号字符串中唯一的转义序列是\\
和\'
。根据文档,所有其他内容都按字面意思输出:
要指定文字单引号,请使用反斜杠 (
\
) 对其进行转义。要指定文字反斜杠,请将其加倍 (\\
)。所有其他反斜杠实例将被视为文字反斜杠:这意味着您可能习惯的其他转义序列,例如\r
or\n
,将按指定的字面输出而不是具有任何特殊含义。
另一方面,在 JS 中,如果字符串包含无效的转义序列,则反斜杠将被丢弃(CV
表示字符值):
- CharacterEscapeSequence :: NonEscapeCharacter的CV是NonEscapeCharacter的 CV 。
- NonEscapeCharacter :: SourceCharacter但不是EscapeCharacter或LineTerminator的 CV是SourceCharacter字符本身。
引用本身可能没有帮助,但如果您点击链接并查看语法,它应该会变得清晰。
因此,在 PHP 中,字符串实际上会包含\"
,而在 JS 中,它只会包含"
,这使得 JSON 无效:
{"data":"{"json":"rocks"}"}
如果要在 JS 中创建文字反斜杠,则必须对其进行转义:
'{"data":"{\\"json\\":\\"rocks\\"}"}'
要在字符串文字中有文字反斜杠,您需要\\
.
console.log(JSON.parse('{"data":"{\\"json\\":\\"rocks\\"}"}'));
这将成功地转义 JSON 处理的内部引号。
您需要转义反斜杠:
console.log(JSON.parse('{"data":"{\\"json\\":\\"rocks\\"}"}'));
带有一个或多个'\' 的对象不会通过JSON.parser返回 Object ,它将再次返回字符串并跳过一个'\'。您可以一次又一次地进行解析,直到跳过所有“\” 。
myobj = {\"json\":\"rocks\"}
myobj = {\\"json\\":\\"rocks\\"}
以下几行对我有用
删除反斜杠
while(typeof myobj == 'string'){
myobj = JSON.parse(myobj)
}
您实际上并不需要在单引号内转义双引号,并且您在内部对象周围的输入中有两个额外的引号,只是
console.log(JSON.parse('{"data":{"json":"rocks"}}'));
足够。