JSONによって解決される問題
2台のコンピューター間で通常のJavaScriptオブジェクトを交換したいとし、2つのルールを設定するとします。
- 送信されるデータは通常の文字列でなければなりません。
- 交換できるのは属性のみで、メソッドは送信されません。
次に、最初のホストに2つのオブジェクトを作成します。
var obj1 = { one: 1,"two":2,"three":3 }; // your example
var obj2 = { one: obj1.one, two: 2, three: obj1.one + obj1.two };
これらのオブジェクトを2番目のホストに送信するために文字列に変換するにはどうすればよいですか?
- 最初のオブジェクトの場合、リテラル定義
'{ one: 1,"two":2,"three":3 }'
から取得したこの文字列を送信できますが、実際にはドキュメントのスクリプト部分のリテラルを読み取ることはできません(少なくとも簡単にはできません)。したがってobj1
、obj2
実際には同じ方法で処理する必要があります。
- すべての属性とその値を列挙し、オブジェクトリテラルと同様の文字列を作成する必要があります。
JSONは、先ほど説明したニーズに対するソリューションとして作成されました。これは、すべての属性と値をリストしてオブジェクトと同等の文字列を作成する一連のルールです(メソッドは無視されます)。
JSONは、属性名と値の二重引用符の使用を正規化します。
JSONは単なるルールのセット(標準)であることに注意してください。
JSONオブジェクトはいくつ作成されますか?
1つだけ、それはJSエンジンによって自動的に作成されます。
ブラウザにある最新のJavaScriptエンジンには、JSONという名前のネイティブオブジェクトがあります。このJSONオブジェクトは次のことができます。
(単一の)JSONオブジェクトはコーデックに似ており、その機能はエンコードとデコードです。
ご了承ください:
質問に戻る:
Q1:オブジェクトリテラルでは、二重引用符を1つ使用できます。引用符はオプションで属性名に使用され、文字列値には必須であることに注意してください。オブジェクトリテラル自体は引用符で囲まれていません。
Q2:リテラルから作成され、JSON.parse()を使用して作成されたオブジェクトは、まったく同じです。これら2つのオブジェクトは、作成後は等価です。
var obj1 = { one: 1, "two": 2, "three": 3 };
var obj2 = JSON.parse('{ "one": "1", "two": "2", "three": "3" }');
Q3:最近のブラウザでJSON.parse()
は、JSON準拠の文字列からJSオブジェクトを作成するために使用されます。(jQueryには、すべてのブラウザーで使用できる同等のメソッドもあります)。