请考虑以下示例。
<script>
var dirstruct=JSON.parse('{"Foo":{"Bar.txt":"\n"},"Blahblah.txt":"FooBar\n"}');
</script>
我已通过JSONLint将JSON放在单引号中,但是当在Firefox中加载此文件时,我收到以下错误。
SyntaxError: JSON.parse: bad control character in string literal at line 1 column 20 of the JSON data
此错误的原因是什么?如何更正?
答案 0 :(得分:1)
错误的原因是"\n"
被解释为文字换行符:
{"Foo":{"Bar.txt":"
"},"Blahblah.txt":"FooBar
"}
这是一个无效的JSON。你应该用反斜杠来说明\n
:
var dirstruct=JSON.parse('{"Foo":{"Bar.txt":"\\n"},"Blahblah.txt":"FooBar\\n"}');
答案 1 :(得分:1)
Ruslan的回答强调了这个问题,但他建议的解决方案不是我实际使用的解决方案,因为我是从服务器端代码生成\n
的,而这个代码不知道客户端有这个问题。
我实际使用的解决方案是String.raw
,因为这意味着服务器端JSON生成器可以简单地生成语法正确的JSON,而不用担心它被传递给JSON解析器之前被Javascript String解释器重新解释
<script>
var dirstruct=JSON.parse(String.raw`{"Foo":{"Bar.txt":"\n"},"Blahblah.txt":"FooBar\n"}`);
</script>
有时MCVE可能过于简单。