118

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

  • 誰かがJSONとJavaScriptオブジェクトの違いを説明できますか?
  • それらの用途は何ですか?
  • 一方はもう一方よりも優れていますか?それとも状況次第ですか?
  • いつ、どのような状況で、どれを使用するのですか?
  • そもそもJSONが作成されたのはなぜですか?その主な目的は何でしたか?
  • JavaScriptオブジェクトではなくJSONを使用する必要がある場合、またはその逆の場合の例を誰かに教えてもらえますか?
4

3 に答える 3

171

まず、JSONとは何かを知っておく必要があります。

  • これは、言語に依存しないデータ交換形式です。

JSONの構文は、JavaScript Object Literal表記に触発されましたが、それらの間には違いがあります。

たとえば、JSONではすべてのキーを引用符で囲む必要がありますが、オブジェクトリテラルではこれは必要ありません。

// JSON:
{ "foo": "bar" }

// Object literal:
var o = { foo: "bar" };

JavaScript(より正確にはECMAScript 3rd。Edition)では、プロパティ名としての予約語の使用が許可されていないため、JSONでは引用符が必須です。次に例を示します。

var o = { if: "foo" }; // SyntaxError in ES3

一方、文字列リテラルをプロパティ名として使用すると(プロパティ名を引用)、問題は発生しません。

var o = { "if": "foo" }; 

したがって、「互換性」(およびおそらく簡単な評価)のために、引用符は必須です。

JSONのデータ型も次の値に制限されています。

  • string
  • number
  • object
  • array
  • リテラルとして:
    • true
    • false
    • null

変更の文法Strings。これら二重引用符で区切る必要がありますが、JavaScriptでは、一重引用符または二重引用符を同じ意味で使用できます。

// Invalid JSON:
{ "foo": 'bar' }

受け入れられているJSON文法も変更されます。たとえば、JavaScriptでは、16進リテラル、または(悪名高い)8Numbers進リテラルを使用できます。JSONでは、10進リテラルのみを使用できます。0xFF010

// Invalid JSON:
{ "foo": 0xFF }

いくつかのバグのある実装(Firefox 3.5 +、IE8 +、json2.js)があり、8進リテラルが誤って許可されています。たとえば、JSON.parse('01')を生成する必要がありSyntaxErrorます。

于 2010-10-20T08:13:40.470 に答える
28

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

つまり、オブジェクトから文字列に変換したり、逆に変換したりできる形式にすぎません。これは、ネットワークを介してオブジェクトを転送する場合に便利です。

これはjavascriptオブジェクト表現に非常に近くeval()、JSON文字列を使用するだけで対応するオブジェクトを取得できます。

于 2010-10-20T08:13:27.193 に答える
2

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

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

于 2010-10-20T08:15:09.903 に答える