2016-12-26 5 views
0

次の例を考えてみましょう。FirefoxがここでJSON解析エラーを投げるのはなぜですか?

<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 

このエラーの原因は何か、どのように修正できますか?

{"Foo":{"Bar.txt":" 
"},"Blahblah.txt":"FooBar 
"} 

、これは無効なJSONです:

+2

エスケープバックスラッシュ['JSON.parse( '{" Foo ":{" Bar.txt ":" \\ n "}" Blahblah.txt ":" FooBar \\ n "}')'](https ://jsfiddle.net/tusharj/4zo8Lybk/) – Tushar

+0

@ Tushar、Ugh、私はこれをPHPで生成していましたが、JS側で2番目の引用符があるのを忘れていました。ありがとう! – merlin2011

答えて

1

エラーの原因は"\n"がリテラルの改行文字として解釈されていることです。あなたはバックスラッシュで\nをesape必要があります。

var dirstruct=JSON.parse('{"Foo":{"Bar.txt":"\\n"},"Blahblah.txt":"FooBar\\n"}'); 
1

ルスランの答えは、問題を強調したが、彼は提案された解決策は、原因私は、サーバー側のコードから\n年代を生成したという事実に、私が実際に使用したものではなかったですクライアントがこの問題を抱えているかどうかはわかりませんでした。

サーバー側のJSONジェネレータがJSONパーサーに渡される前にJavascript Stringインタープリタによって再解析されることを心配せずに構文上正しいJSONを生成できるため、実際にはString.rawでした。

<script> 
var dirstruct=JSON.parse(String.raw`{"Foo":{"Bar.txt":"\n"},"Blahblah.txt":"FooBar\n"}`); 
</script> 

時々MCVEはあまりにもシンプルにすることができます。

関連する問題