1. ホーム
  2. javascript

[解決済み] JSONとJavaScriptオブジェクトの違いは何ですか?[重複あり]

2022-09-27 15:50:30

質問

JSONとJavaScriptのオブジェクトは初めてです。

  • どなたか、JSONとJavaScriptオブジェクトの違いを説明していただけませんか?
  • それらの用途は何ですか?
  • どちらか一方が優れているのでしょうか? それとも状況によるのでしょうか?
  • どのような状況で、どちらを使えばいいのでしょうか?
  • そもそも、なぜJSONが作られたのでしょうか?その主な目的は何だったのでしょうか?
  • JavaScriptオブジェクトではなくJSONを使うべき場合、またその逆の場合の例を誰か教えてください。

どのように解決するのですか?

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

  • それは 言語に依存しない データ交換フォーマットです。

JSONの構文は、JavaScript Object Literal記法にヒントを得ていますが、両者には違いがあります。

例えば、JSONではすべての キー は引用されなければなりませんが、オブジェクトリテラルではその必要はありません。

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

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

引用符はJSONでは必須です。なぜなら、JavaScript(正確にはECMAScript第3版)では 予約語 をプロパティ名として使用することは許可されていません。

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 または (悪名高い) 8 進数表示が使えます。 010 . JSONでは、10進数のみ使用できます。

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

8進数のリテラルを誤って許可してしまうバグのある実装 (Firefox 3.5+, IE8+, json2.js) が存在します。 JSON.parse('01')SyntaxError .