2013-12-10 17 views
5

私は次の行にIEで実行しているJSの部分を持っている:JSON.Parseが「無効な文字」と言っているのはなぜですか?

var data = JSON.parse("{ skill: 'SK_AUTO_DEV_TEST', kind: 'IS_REQUIRED' }");

誰もがこれで間違っているものを私に伝えることができますか?

+6

[JSONLint](http://jsonlint.com/)をご覧ください。それはかなり良いエラーメッセージを与えるオンラインバリデーターです。 –

答えて

13

ことがepascarelloの答えについて詳しく説明するために有効なJSON

JSON.parse('{ "skill": "SK_AUTO_DEV_TEST", "kind": "IS_REQUIRED" }'); 
+1

ありがとうございます。プロパティ名の前後に引用符が必要なのはなぜですか?私はそれが常にJSONパーサではないことを見てきました。 – skb

+2

標準では二重引用符が必要です。 'JSON.parse()'がそれに続き、おそらくあなたが使ったもう一つのパーサは、そのルールで緩和されていたでしょう。理由は予約語問題を回避することです。 JavaScriptファイルで単純なオブジェクトを作成し、 '{if:0}'と '{0 '}を試してみてください。どちらが誤りであるかを推測しますか? – epascarello

+0

こんにちは@epascarello、以下のコードをどのように扱うか考えてください。 'var text = '{" skill ":" SK_AUTO_DEV_TEST "、" kind ":" IS_REQUIRED "}'; JSON.parse(text); '私にとって、parse行でInvalid Charと表示されています。私はw3schoolで一重引用符でうんざりしていましたが、その作業はjavascriptの最初と最後に二重引用符を追加するとJSON.parse( "{" skill ":" SK_AUTO_DEV_TEST "、" kind ":" IS_REQUIRED "}"); ' – Jaikrat

2

ではありませんので、json.orgを参照してください。最初の図では、名前/値のペアの名前が「文字列」として定義されていることに注意してください。それから、二重引用符で始まり、終わらなければならない "文字列"を定義するダイアグラムに注意してください。また、これは名前と値の両方に適用されます。