JSONおよびJavaScriptオブジェクトは初めてです。
まず、JSONとは何かを知っておく必要があります。
JSONの構文はJavaScript Object Literal表記法に触発されましたが、違いがあります。
たとえば、JSONではすべてkeysを引用符で囲む必要がありますが、オブジェクトリテラルではこれは不要です。
_// JSON:
{ "foo": "bar" }
// Object literal:
var o = { foo: "bar" };
_
JavaScript(より正確にはECMAScript第3版)では、プロパティ名としての予約語の使用は許可されていないため、JSONでは引用符は必須です:
_var o = { if: "foo" }; // SyntaxError in ES3
_
一方、プロパティ名として文字列リテラルを使用しても(プロパティ名を引用して)問題はありません。
_var o = { "if": "foo" };
_
したがって、 "compatibility"(および簡単な評価ですか?)の場合、引用符は必須です。
JSONのデータ型も次の値に制限されています。
string
number
object
array
true
false
null
Strings
の文法が変わります。それらは二重引用符で区切られている必要がありますが、JavaScriptでは、一重引用符または二重引用符を同じ意味で使用できます。
_// Invalid JSON:
{ "foo": 'bar' }
_
受け入れられるNumbers
のJSON文法も変更されます。JavaScriptでは、_0xFF
_などの16進リテラル、または(悪名高い)Octal Literalsを使用できます。 _010
_。 JSONでは、10進リテラルのみを使用できます。
_// Invalid JSON:
{ "foo": 0xFF }
_
8進リテラルが誤って許可されているバグのある実装(Firefox 3.5 +、IE8 +、json2.js)があります。 JSON.parse('01')
はSyntaxError
を生成する必要があります。
JSONはオブジェクトの文字列表現です。これは、相互運用可能なシリアル化形式です。 JavaScriptだけに結び付けられているわけではありません。たとえば、.NETのJSONシリアライザーを使用すると、.NETオブジェクトをシリアル化/逆シリアル化できます。
したがって、オブジェクトから文字列への変換およびその逆の変換を可能にする単なる形式であり、オブジェクトをネットワーク経由で転送する場合に便利です。
Javascriptオブジェクト表現に非常に近く、JSON文字列を単にeval()
すると、対応するオブジェクトが取得されます。
JSONはデータ交換形式で、たまたま実行してオブジェクトを取得できるYAMLまたはJavaScriptコードのサブセットのように見えます。 JavaScriptオブジェクトは、JavaScriptの単なるオブジェクトです。
JSONはデータ交換形式であるため、テキスト形式の構造化データをJSONと交換できます。今ではJavaScriptからかなり分離されています。 JavaScriptオブジェクトを使用すると、JavaScriptプログラムの実行中に構造化データを作成および操作できます。