1. ホーム
  2. ジャバスクリプト

[解決済み】JavascriptのオブジェクトとJSONの比較

2022-04-03 10:04:33

質問

JavascriptのオブジェクトとJSONの文字列の基本的な違いを明確に理解したいのですが。

例えば、次のようなJS変数を作るとしよう。

var testObject = {one: 1,"two":2,"three":3};

Q1. キー/プロパティ名は、引用符を使っても使わなくても有効ですか? (例 "one" : 1 )

Yesの場合、その違いは何ですか?

Q2: 上記のオブジェクトを JSON.stringify(testObject) 元のJSオブジェクトとJSONの違いは何ですか?

ほとんど同じような気がするのですが。詳しく教えてください。

Q3: JSON文字列のパースには、以下の方法が推奨されますか?

var javascriptObj = JSON.parse(jSonString);

解決方法は?

  1. <ブロッククオート

    キー/プロパティ名は、引用符の有無にかかわらず有効ですか?

オブジェクト リテラル記法を使用する際にキーを引用符で囲む必要があるのは、キーに特殊文字 ( if , : , - など)。注目すべきは、JSONのキーである で囲まれている ダブル を引用しています。

  1. 上記のオブジェクトをJSONに変換するには var jSonString = JSON.stringify(testObject); この2つ(JS objとJSON)の違いは何ですか?

JSON は、データ交換フォーマットです。順序付きリストや順序なしマップ、文字列、ブール値、数値をどのように文字列で表現できるかを記述した規格です。XMLやYAMLが言語間で構造化された情報を受け渡しする方法であるのと同様に、JSONも同じです。一方、JavaScriptのオブジェクトは、物理的な型です。PHPの配列やC++のクラス/構造体のように、JavaScriptのオブジェクトはJavaScriptの内部の型です。

こんな話がある。あるお店で家具を購入し、それを配送して欲しいと思ったとします。しかし、在庫があるのは展示モデルだけで、あなたはそれを買うことに同意します。

お店では、あなたが購入したタンスは生きものなのです。

    var chestOfDrawers = {
        color: "red",
        numberOfDrawers: 4
    }

しかし、タンスを郵便で送るわけにはいかないので、解体する(読み方は、ひもで縛る)。家具としては使い物にならなくなりました。もはやJSONである。そのフラットパック状態です。

    {"color":"red","numberOfDrawers":4}

受け取ったら、次にタンスを再構築する(読む、解析する)。これで、オブジェクトの形に戻りました。

JSON、XML、YAMLの背後にある理由は、参加する両方の言語が理解できる形式でプログラミング言語間のデータ転送を可能にすることです。PHPやC++に直接JavaScriptオブジェクトを渡すことはできません。しかし、オブジェクトを JSON 表記、つまりデータを表現する標準的な方法に文字列化したので、JSON を送信できます。 表現 を他の言語(C++, PHP)に渡すと、その言語では 再作成 を自分のオブジェクトに変換することができます。 ベース オブジェクトのJSON表現に基づいています。

注意すべきは、JSONは関数や日付を表現できないことです。関数を持つオブジェクトを文字列化しようとすると、その関数はJSON表現から省かれます。日付は文字列に変換されます。

    JSON.stringify({
        foo: new Date(),
        blah: function () { 
            alert('hello');
        }
    }); // returns the string "{"foo":"2011-11-28T10:21:33.939Z"}"

  1. JSONの文字列をパースする場合、以下の方法が推奨されますか? var javascriptObj = JSON.parse(jSonString);

はい、でも 古いブラウザは、JSONをネイティブにサポートしていない(IE <8) . これらに対応するためには json2.js .

jQueryを使用している場合は、以下のように jQuery.parseJSON() を使用します。 JSON.parse() をサポートし、それ以外の場合はカスタム実装にフォールバックして入力をパースします。