以下を評価しようとすると、Chrome と Firefox の両方の開発者ツールでエラーが発生します。
{
"a": "",
"b": ""
}
jsonlint.com は、それが有効であることを教えてくれます。このコードを実際の JavaScript ファイルに入れて実行すると、問題なく動作します。奇妙さは、クロム開発者ツールまたはファイアバグのコンソールでこれを実行した場合にのみ表示されます。何が起きてる?
以下を評価しようとすると、Chrome と Firefox の両方の開発者ツールでエラーが発生します。
{
"a": "",
"b": ""
}
jsonlint.com は、それが有効であることを教えてくれます。このコードを実際の JavaScript ファイルに入れて実行すると、問題なく動作します。奇妙さは、クロム開発者ツールまたはファイアバグのコンソールでこれを実行した場合にのみ表示されます。何が起きてる?
コンソールでJSONを実行することはできません。JavaScriptエンジンは、ラベル付きのブロックステートメントと見なします。
したがって、この:
{
"a": "", "b": ""
}
ブロックステートメントとして解釈されます。パーツはラベルとして解釈されます。次に、"a":
この"", "b"
部分は式として解釈されます(2つの文字列リテラルとその間のコンマ演算子)。ここで、2番目の:
文字はその位置では無効です..."a"
は文字列リテラルとして解釈され、はその位置:
では無効です。
次のようにJSONを操作します。
.json
ファイルに入れます、JSON.parse()
。(たとえば、JSONデータを文字列として変数またはlocalStorage
オブジェクトに保持することもできます。いずれにしても、JavaScriptに関しては、JSONデータは常に文字列値として提供される必要があります。)
実際、1 回限りのテスト (私の主なデバッグ コンソールの使用) では、 JSON オブジェクト構文を入力できますが、それを変数に割り当てる必要があります。
> var x ={
"a": "",
"b": ""
}
undefined
> x
Object
a: ""
b: ""
__proto__: Object