JAsonデータフォーマット
JSONはJavaScript Object Notationの略称で、軽量なデータ表示方法です.JAsonフォーマットはkey:value方式でデータを記録し、非常に直感的でXMLより簡潔で人気があります
jasonフォーマットを紹介する前に、XMLフォーマットを見てみましょう.明らかに、XMLはかなりの注目を集めており(プラスとマイナスの評価があります)、Ajaxアプリケーションで広く使用されています.
<request>
<firstName>Brett</firstName>
<lastName>McLaughlin</lastName>
<email>[email protected]</email>
</request>
ここでのデータは前に見たものと同じですが、今回はXML形式を採用します.これは何も起きられないことはありません.これは別のデータフォーマットにすぎず、純粋なテキストと名前/値のペアではなくXMLを使用できます.
ここでは、JavaScript Object Notation(JSON)という別のデータフォーマットについて説明します.JSONは見慣れていて見慣れていないように見えます.それは別の選択肢を提供して、選択範囲がもっと広いのはいつも良いことです.
JSONの追加
名前/値ペアまたはXMLを使用する場合、実際にはJavaScriptを使用してアプリケーションからデータを取得し、データを別のデータフォーマットに変換します.これらの場合、JavaScriptは、Webフォームからのデータを移動および操作し、サーバ側のプログラムに送信するのに適したフォーマットに変換するためのデータ操作言語として大きく使用されます.
ただし、JavaScriptはフォーマット言語としてのみ使用されない場合があります.これらの場合、実際には、Webフォームからのデータを要求に入れるだけでなく、JavaScript言語のオブジェクトを使用してデータを表す.これらの場合、JavaScriptオブジェクトからデータを抽出し、名前/値ペアまたはXMLにデータを入れるのは、少し多いです.この場合、JSON:JSONを使用すると、JavaScriptオブジェクトを要求に応じて送信できるデータに簡単に変換できます(同期でも非同期でも構いません).
JSONは何かの魔弾ではありません.しかし、それはいくつかの非常に特殊な状況にとって良い選択です.
JSONベース
簡単に言えば、JSONはJavaScriptオブジェクトで表されるデータのセットを文字列に変換し、関数間でこの文字列を簡単に渡したり、非同期アプリケーションでWebクライアントからサーバ側プログラムに文字列を渡したりすることができます.この文字列は少し変に見えますが(後でいくつかの例を参照してください)、JavaScriptは簡単に説明でき、JSONは名前/値ペアよりも複雑な構造を表すことができます.たとえば、キーや値の単純なリストだけでなく、配列や複雑なオブジェクトを表すことができます.
単純JSON例
最も簡単な形式で、以下のようなJSONで名前/値ペアを表すことができます.
{ "firstName": "Brett" }
この例は非常に基本的であり、実際には等価な純テキスト名/値ペアよりも多くのスペースを占めています.
firstName=Brett
しかし,複数の名称/値を連ねるとJSONの価値が現れる.まず、次のような複数の名前/値のペアを含むレコードを作成できます.
{ "firstName": "Brett", "lastName":"McLaughlin", "email": "[email protected]" }
文法的には名称/値ペアに比べて大きなメリットはありませんが、この場合JSONの方が使いやすく、読みやすさが優れています.例えば、以上の3つの値が同じレコードの一部であることを明確に示す.カッコはこれらの値に何らかのつながりをもたらします.
値の配列
値のセットを表示する必要がある場合、JSONは可読性を向上させるだけでなく、複雑さを低減することができる.たとえば、人名リストを表示したいとします.XMLでは、多くの開始タグと終了タグが必要です.通常の名前/値ペア(本シリーズの前の文書で見たような名前/値ペア)を使用する場合は、固有のデータフォーマットを確立するか、キー名を
person1-firstName
に変更する必要があります.JSONを使用する場合は、カッコ付きの複数のレコードをグループ化するだけです.
{ "people": [
{ "firstName": "Brett", "lastName":"McLaughlin", "email": "[email protected]" },
{ "firstName": "Jason", "lastName":"Hunter", "email": "[email protected]" },
{ "firstName": "Elliotte", "lastName":"Harold", "email": "[email protected]" }
]}
これは理解にかたくない.この例では、
people
という変数は1つだけで、値は3つのエントリを含む配列であり、各エントリは1人のレコードであり、名前、姓、電子メールアドレスが含まれている.上記の例では、記録をカッコで1つの値に組み合わせる方法を示します.もちろん、同じ構文を使用して複数の値を表すことができます(各値には複数のレコードが含まれます).{ "programmers": [
{ "firstName": "Brett", "lastName":"McLaughlin", "email": "[email protected]" },
{ "firstName": "Jason", "lastName":"Hunter", "email": "[email protected]" },
{ "firstName": "Elliotte", "lastName":"Harold", "email": "[email protected]" }
],
"authors": [
{ "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" },
{ "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" },
{ "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" }
],
"musicians": [
{ "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" },
{ "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" }
]
}
ここで最も注目すべきは、複数の値を表すことができ、各値にはさらに複数の値が含まれることである.ただし、レコード内の実際の名前/値のペアは、異なるプライマリ・エントリ(programmers、authors、musicians)の間で異なる場合があります.JSONは完全にダイナミックであり,JSON構造の途中でデータを表す方式を変えることができる.
JSON形式のデータを扱う場合、遵守する必要のある事前定義された制約はありません.したがって、同じデータ構造では、データを表す方法を変えることができ、同じものを異なる方法で表すこともできる.
JavaScriptでJSONを使う
JSON形式をマスターしてJavaScriptで使うと簡単です.JSONはJavaScriptのオリジナルフォーマットであり、JavaScriptでJSONデータを処理するには特別なAPIやツールパッケージが必要ないことを意味します.
JSONデータを変数に割り当てる
たとえば、新しいJavaScript変数を作成し、JSON形式のデータ文字列を直接割り当てることができます.
var people =
{ "programmers": [
{ "firstName": "Brett", "lastName":"McLaughlin", "email": "[email protected]" },
{ "firstName": "Jason", "lastName":"Hunter", "email": "[email protected]" },
{ "firstName": "Elliotte", "lastName":"Harold", "email": "[email protected]" }
],
"authors": [
{ "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" },
{ "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" },
{ "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" }
],
"musicians": [
{ "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" },
{ "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" }
]
}
これはとても簡単です.現在、
people
には、前に見たJSON形式のデータが含まれています.しかし、データへのアクセス方法はまだ明らかではないようです.データへのアクセス
明らかに見えませんが、上の長い文字列は実際には配列にすぎません.この配列をJavaScript変数に入れると、簡単にアクセスできます.実際には,配列要素をドット表現で表すだけである.したがって、programmersリストの最初のエントリの姓にアクセスするには、JavaScriptで次のようなコードを使用します.
people.programmers[0].lastName;
配列インデックスはゼロから始まることに注意してください.したがって、この行のコードは、まず
people
変数のデータにアクセスする.次いで、programmers
と呼ばれるエントリに移動し、第1のレコード([0]
)に移動する.最後に、lastName
キーの値にアクセスします.結果は文字列値「McLaughlin」です.次は、同じ変数を使用するいくつかの例です.
people.authors[1].genre // Value is "fantasy"
people.musicians[3].lastName // Undefined. This refers to the fourth entry,
and there isn't one
people.programmers.[2].firstName // Value is "Elliotte"
このような構文を使用すると、JavaScriptツールパッケージやAPIを追加することなく、JSON形式のデータを処理できます.
JSONデータの修正
ポイント番号と括弧でデータにアクセスできるように、同じように簡単にデータを変更できます.
people.musicians[1].lastName = "Rachmaninov";
文字列をJavaScriptオブジェクトに変換すると、このように変数のデータを変更できます.
文字列に変換
もちろん、オブジェクトを本明細書で説明したテキストフォーマットに簡単に変換できない場合、すべてのデータ変更にはあまり価値がありません.JavaScriptでは、この変換も簡単です.
String newJSONtext = people.toJSONString();
これでいい!これで、Ajaxアプリケーションの要求文字列として使用できるように、どこででも使用できるテキスト文字列が得られます.
さらに重要なのは、任意のJavaScriptオブジェクトをJSONテキストに変換できることです.JSON文字列で与えられた変数のみを扱うわけではありません.
myObject
という名前のオブジェクトを変換するには、同じ形式のコマンドを実行します.String myObjectInJSON = myObject.toJSONString();
これがJSONと本シリーズで論じた他のデータフォーマットとの最大の違いである.JSONを使えば簡単な関数を1つ呼び出すだけでフォーマットされたデータが得られ、そのまま使えます.他のデータフォーマットでは、元のデータとフォーマットされたデータの間で変換する必要があります.Document Object ModelのようなAPI(独自のデータ構造をテキストに変換する関数を提供する)を使用しても、オリジナルのJavaScriptオブジェクトや構文ではなく、このAPIを学習してAPIのオブジェクトを使用する必要があります.
最終的には、JavaScriptオブジェクトを大量に処理する場合、JSONはほとんど良い選択であり、要求でサーバ側プログラムに送信できるフォーマットに簡単にデータを変換することができると結論した.