我已经生成了一些JSON,我试图将它拉入JavaScript中的对象.我一直在收到错误.这就是我所拥有的:
var data = '{"count" : 1, "stack" : "sometext\n\n"}'; var dataObj = eval('('+data+')');
这给了我一个错误:
unterminated string literal
有了JSON.parse(data)
,我看到类似的错误消息:Unexpected token ?
Chrome中的" unterminated string literal
"和Firefox和IE中的" ".
当我取出\n
后sometext
,错误消失了两种情况.我似乎无法弄清楚为什么\n
制造eval
和JSON.parse
失败.
我想这就是你想要的:
var data = '{"count" : 1, "stack" : "sometext\\n\\n"}';
(您需要转义字符串中的"\"(将其转换为双 - "\"),否则它将成为JSON源中的换行符,而不是JSON数据.)
你需要有它取代的功能\n
来\\n
的情况下,data
是不是一个字符串文字.
function jsonEscape(str) { return str.replace(/\n/g, "\\\\n").replace(/\r/g, "\\\\r").replace(/\t/g, "\\\\t"); } var data = '{"count" : 1, "stack" : "sometext\n\n"}'; var dataObj = JSON.parse(jsonEscape(data));
结果dataObj
将是
Object {count: 1, stack: "sometext\n\n"}
根据规范:http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf
jsonStr = "{ \"name\": \"Multi\\nline.\" }";
所以你不能直接传递U+0022
或U+0022
编码.这是被禁止的!规格建议使用的转义序列用于从一些明确定义的代码U+005C
来U+0000
:
jsonStr = "{ \"name\": \"Multi\\nline.\" }";
由于大多数编程语言都U+001F
用于引用,你应该转义转义语法(双转义 - 一次用于语言/平台,一次用于Json本身):
jsonStr = "{ \"name\": \"Multi\\nline.\" }";