Javascript' JSON.parse的错误?

时间:2012-09-29 18:52:30

标签: javascript json

console.log(JSON.parse('{"data":"{\"json\":\"rocks\"}"}'));

给出错误(在Firefox和Chrome的控制台上测试)。这是JSON.parse的错误吗?使用PHP测试时,相同的解码很好。

print_r(json_decode('{"data":"{\"json\":\"rocks\"}"}', true));

5 个答案:

答案 0 :(得分:10)

这个字符串在PHP和JS中的处理方式不同,即你会得到不同的结果。

PHP中单引号字符串中唯一的转义序列是\\\'。根据{{​​3}}:

,所有其他字面输出
  

要指定文字单引号,请使用反斜杠(\)对其进行转义。要指定文字反斜杠,请将其加倍(\\)。反斜杠的所有其他实例将被视为文字反斜杠:这意味着您可能习惯使用的其他转义序列(例如\r\n)将按字母顺序输出,而不是任何特殊意义。

另一方面,在JS中,如果字符串包含无效的转义序列,documentationCV表示字符值):

  
      
  • CharacterEscapeSequence :: NonEscapeCharacter 的CV是 NonEscapeCharacter 的CV。
  •   
  • NonEscapeCharacter :: SourceCharacter 的CV,但 EscapeCharacter LineTerminator 的CV是 SourceCharacter 字符本身。< / LI>   

引用本身可能没什么用处,但是如果你按照链接查看语法,它就会变得清晰。


因此在PHP中字符串将包含\",而在JS中它只包含",这使得它无效JSON:

{"data":"{"json":"rocks"}"}

如果你想在JS中创建一个文字反斜杠,你必须逃避它:

'{"data":"{\\"json\\":\\"rocks\\"}"}'

答案 1 :(得分:4)

要在字符串文字中使用文字反斜杠,您需要\\

console.log(JSON.parse('{"data":"{\\"json\\":\\"rocks\\"}"}'));

这将成功转义JSON处理的内部引号。

答案 2 :(得分:3)

你需要逃避反斜杠:

console.log(JSON.parse('{"data":"{\\"json\\":\\"rocks\\"}"}'));​

答案 3 :(得分:1)

你真的不需要在单引号内转义双引号,你在内部对象的输入中有两个额外的引号,只是

console.log(JSON.parse('{"data":{"json":"rocks"}}'));

就够了。

答案 4 :(得分:1)

具有一个或多个&#39; <&#39; 的对象不会通过 JSON.parser 返回Object,它将再次返回字符串并跳过一个<强>&#39; \&#39; 即可。 您可以反复解析,直到跳过所有&#39; <&#39;

myobj = {\&#34; json \&#34;:\&#34; rocks \&#34;}

myobj = {\\&#34; json \\&#34;:\\&#34; rocks \\&#34;}

以下线为我工作

删除反斜杠

while(typeof myobj == 'string'){
       myobj = JSON.parse(myobj)
}