为什么Firefox会在这里抛出JSON解析错误?

时间:2016-12-26 07:30:39

标签: javascript json firefox

请考虑以下示例。

<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

此错误的原因是什么?如何更正?

2 个答案:

答案 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可能过于简单。