JSONとJavaScriptオブジェクトの違いは何ですか? [複製
-
09-10-2019 - |
質問
この質問にはすでに答えがあります:
私はJSONとJavaScriptオブジェクトに初めてです。
- JSONとJavaScriptオブジェクトの違いを誰かが説明できますか?
- 彼らの用途は何ですか?
- 一方はもう一方よりも優れていますか?それとも状況に依存しますか?
- いつ使用するか、どのような状況ですか?
- なぜJSONがそもそも作成されたのですか?その主な目的は何でしたか?
- 誰かがJavaScriptオブジェクトではなくJSONを使用する必要がある場合の例を挙げてもらえますか?
解決
まず、JSONが何であるかを知っておく必要があります。
- そうです 言語不可知論者 データインターチェンジ形式。
JSONの構文は、JavaScriptオブジェクトのリテラル表記に触発されましたが、それらの間には違いがあります。
たとえば、JSON Allで キー 引用する必要がありますが、オブジェクトリテラルではこれは必要ありません。
// JSON:
{ "foo": "bar" }
// Object literal:
var o = { foo: "bar" };
JavaScriptでは(ECMAScript3rd。Editionで正確に)、の使用は、JSONでは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文法 Numbers
また、JavaScriptでは、16進数リテラルを使用できます。たとえば 0xFF
, 、または(悪名高い)octalリテラル 010
. 。 JSONでは、小数リテラルのみを使用できます。
// Invalid JSON:
{ "foo": 0xFF }
いくつかのバギーの実装(Firefox 3.5+、IE8+、json2.js)があり、オクタル文字が誤って許可されています。 JSON.parse('01')
aを生成する必要があります SyntaxError
.
他のヒント
JSONはオブジェクトの文字列表現です。相互運用可能なシリアル化形式です。 JavaScriptだけに結び付けられていません。たとえば、.NET用のJSONシリアライザーがあり、.NETオブジェクトをシリアル化/脱また重ねることができます。
したがって、これは単なるフォーマットであり、オブジェクトから文字列とバックに変換できます。これは、ワイヤー上に転送する場合に便利です。
JavaScriptオブジェクトの表現に非常に近いです。 eval()
JSON文字列には、対応するオブジェクトが取得されます。
JSONはデータインターチェンジ形式であり、たまたまYAMLまたはJavaScriptコードのサブセットのように見え、オブジェクトを実行して戻すことができます。 JavaScriptオブジェクトは、JavaScriptの単なるオブジェクトです。
JSONがデータインターチェンジ形式である場合、構造化されたデータをテキスト形式で交換できます。これまでにJavaScriptからかなり切り離されています。 JavaScriptオブジェクトを使用すると、JavaScriptプログラムの実行中に構造化されたデータを作成および操作できます。