我已经生成了一些JSON,我试图把它拉到一个对象在JavaScript。我总是出错。以下是我所拥有的:
var data = '{"count" : 1, "stack" : "sometext\n\n"}';
var dataObj = eval('('+data+')');
这给了我一个错误:
unterminated string literal
使用JSON.parse(data),我看到类似的错误消息:在Chrome中“意外的令牌()”,在Firefox和IE中“未终止的字符串文字”。
当我在sometext后面去掉\n时,两种情况下错误都消失了。我似乎不明白为什么\n使eval和JSON。解析失败。
根据规范,http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf:
字符串是用引号括起来的Unicode代码点序列
(U + 0022)。的字符除外,所有字符都可以放在引号内
必须转义的字符:引号(U+0022),倒装固体字符
(U+005C),控制字符U+0000 ~ U+001F。有两个字符
某些字符的转义序列表示。
所以不能直接传递0x0A或0x0C代码。这是禁止的!规范建议对从U+0000到U+001F的一些定义良好的代码使用转义序列:
\f表示换行字符(U+000C)。
\n表示换行字符(U+000A)。
因为大多数编程语言使用\来引用,你应该转义转义语法(双转义-一次用于语言/平台,一次用于JSON本身):
jsonStr = "{ \"name\": \"Multi\\nline.\" }";