web-dev-qa-db-ja.com

JSONとJavaScriptオブジェクトの違いは何ですか?

JSONおよびJavaScriptオブジェクトは初めてです。

  • 誰かがJSONとJavaScriptオブジェクトの違いを説明できますか?
  • それらの用途は何ですか?
  • 一方が他方より優れていますか?それとも状況に依存しますか?
  • どの状況でどの状況を使用するか?
  • そもそもJSONが作成されたのはなぜですか?その主な目的は何ですか?
  • 誰かがJavaScriptオブジェクトではなくJSONを使用する必要がある場合の例を挙げることができますか?
104
Pheap

まず、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を生成する必要があります。

153
CMS

JSONはオブジェクトの文字列表現です。これは、相互運用可能なシリアル化形式です。 JavaScriptだけに結び付けられているわけではありません。たとえば、.NETのJSONシリアライザーを使用すると、.NETオブジェクトをシリアル化/逆シリアル化できます。

したがって、オブジェクトから文字列への変換およびその逆の変換を可能にする単なる形式であり、オブジェクトをネットワーク経由で転送する場合に便利です。

Javascriptオブジェクト表現に非常に近く、JSON文字列を単にeval()すると、対応するオブジェクトが取得されます。

25
Darin Dimitrov

JSONはデータ交換形式で、たまたま実行してオブジェクトを取得できるYAMLまたはJavaScriptコードのサブセットのように見えます。 JavaScriptオブジェクトは、JavaScriptの単なるオブジェクトです。

JSONはデータ交換形式であるため、テキスト形式の構造化データをJSONと交換できます。今ではJavaScriptからかなり分離されています。 JavaScriptオブジェクトを使用すると、JavaScriptプログラムの実行中に構造化データを作成および操作できます。

1
Joey