JSONの基本
簡単に言うと、JSON は JavaScript オブジェクトで表される一連のデータを文字列に変換し、関数間で、または Web クライアントからサーバー側のプログラムに簡単に渡すことができます。この文字列は少し奇妙に見えますが (後でいくつかの例を参照します)、JavaScript はこれを簡単に解釈し、JSON は名前と値のペアよりも複雑な構造を表現できます。たとえば、キーと値の単純なリストではなく、配列や複雑なオブジェクトを表現できます。
簡単なJSONの例
最も単純な形式では、名前と値のペアは次のように JSON で表すことができます:
{ "名": "ブレット" }
この例は非常に基本的なもので、実際には同等のプレーン テキストの名前と値のペアよりも多くのスペースを占有します。
ただし、JSON は、複数の名前と値のペアを文字列化するときに真価を発揮します。まず、次のように、複数の名前と値のペアを含むレコードを作成できます:
{ "firstName": "Brett", "lastName": "McLaughlin", "email": "brett@newInstance.com" }
構文的には、名前と値のペアに比べて大きな利点はありませんが、この場合は JSON の方が使いやすく、読みやすいです。たとえば、上記の 3 つの値が同じレコードの一部であることが明らかになり、中括弧によって値が何らかの関連性を示します。
値のセットを表す必要がある場合、JSON は読みやすさを向上させるだけでなく、複雑さを軽減することもできます。たとえば、人の名前のリストを表現したいとします。 XML では、多くの開始タグと終了タグが必要です。一般的な名前と値のペア (このシリーズの以前の記事で説明したものなど) を使用する場合は、独自のデータ形式を作成するか、キー名を person1 の形式に変更する必要があります。 -ファーストネーム。
JSON を使用する場合は、複数のレコードを中括弧でグループ化するだけです:
JavaScript での JSON の使用
JSON 形式をマスターすれば、JavaScript での使用は簡単です。 JSON はネイティブ JavaScript 形式です。つまり、JavaScript での JSON データの処理には特別な API やツールキットは必要ありません。
JSON データを変数に代入する
たとえば、新しい JavaScript 変数を作成し、JSON 形式のデータ文字列をそれに直接割り当てることができます:
データにアクセスする
明らかではないかもしれませんが、上記の長い文字列は実際には単なる配列であり、JavaScript 変数に入れることでこの配列に簡単にアクセスできます。実際、配列要素を表すにはドット表記を使用するだけです。したがって、プログラマ リストの最初のエントリの姓にアクセスするには、JavaScript で次のようなコードを使用するだけです:
people.programmers[0].lastName;
配列のインデックス付けは 0 から始まることに注意してください。したがって、このコード行は最初に people 変数のデータにアクセスし、次に、programmers というエントリに移動し、次に最初のレコード ([0]) に移動し、最後に lastName キーの値にアクセスします。結果は文字列値「McLaughlin」になります。
同じ変数を使用した例をいくつか示します。
JSONデータを変更する
ピリオドと括弧を使用してデータにアクセスできるのと同じように、同じ方法でデータを簡単に変更できます。
people.musicians[1].lastName = "ラフマニノフ";文字列を JavaScript オブジェクトに変換した後、次のように変数内のデータを変更できます。
文字列に変換し直す
もちろん、オブジェクトをこの記事で説明されているテキスト形式に簡単に変換できない場合、すべてのデータ変更はほとんど意味がありません。この変換も JavaScript では簡単です:
文字列 newJSONtext = people.toJSONString();
以上です!これで、Ajax アプリケーションのリクエスト文字列など、どこでも使用できるテキスト文字列が完成しました。
さらに重要なのは、あらゆる JavaScript オブジェクトを JSON テキストに変換できることです。元々 JSON 文字列が割り当てられていた変数を扱えるだけではありません。 myObject という名前のオブジェクトを変換するには、同じ形式のコマンドを実行するだけです:
文字列 myObjectInJSON = myObject.toJSONString();
これが、JSON とこのシリーズで説明する他のデータ形式の最大の違いです。 JSON を使用する場合、簡単な関数を呼び出すだけで、すぐに使用できるフォーマット済みのデータを取得できます。他のデータ形式の場合は、生データとフォーマット済みデータの間の変換が必要です。ドキュメント オブジェクト モデル (独自のデータ構造をテキストに変換する関数を提供する) のような API を使用する場合でも、API を学習し、ネイティブ JavaScript オブジェクトと構文を使用する代わりに API のオブジェクトを使用する必要があります。
最終的な結論は、多数の JavaScript オブジェクトを扱う場合、リクエストでサーバー側プログラムに送信できる形式にデータを簡単に変換できるように、JSON がほぼ確実に良い選択であるということです。 。
PHPでのJSONのアプリケーション
今日のインターネットでは、AJAX はもはや聞きなれない言葉ではありません。 AJAX といえば、RSS をきっかけに登場した XML がすぐに思い浮かぶかもしれません。特に PHP5 や、最も軽量な SimpleXML などの多数の XML パーサーの登場により、XML 解析はおそらく問題ではなくなりました。ただし、AJAX の場合、XML 解析はフロントエンド Javascript のサポートに重点を置いています。 XML を解析したことがある人なら誰でも、ツリーとノードに混乱すると思います。 XML が非常に優れたデータ保存方法であることは否定できませんが、その柔軟性により解析が困難になります。もちろん、ここで言及する難しさは、この記事の主役である JSON に関連したものです。
JSONとは何ですか?このコンセプトについては繰り返しません。平たく言えば、PHP のシリアル化された文字列のようなデータ ストレージ形式です。データの説明です。たとえば、配列をシリアル化して保存すると、簡単に逆シリアル化して適用できます。 JSON にも同じことが当てはまりますが、クライアント側の Javascript とサーバー側の PHP の間に対話型のブリッジが構築される点が異なります。 PHP を使用して JSON 文字列を生成し、この文字列をフロントエンド Javascript に渡すと、それを簡単に JSON に変換して適用できます。平たく言えば、実際には配列のように見えます。
本題に戻り、JSON の使用方法。 PHP5.2 には JSON のサポートが組み込まれています。もちろん、このバージョンより前のバージョンの場合は、市場に多数の PHP バージョンの実装があるので、必要なものを使用してください。ここでは主に、PHP の JSON 組み込みサポートについて説明します。非常にシンプルな 2 つの関数: json_encode と json_decode (シリアル化とよく似ています)。 1 つはエンコード用、もう 1 つはデコード用です。最初にコーディングの使用方法を見てみましょう:
script type ="text/javascript" src="http://www.openphp.cn/demo/profile.php">
$arr = array(
'name' => 'Script Home',
);
JSON データをサーバーに送信する最も簡単な方法は、それをテキストに変換し、名前と値のペアとして送信することです。 JSON 形式のデータはかなり長いオブジェクトであり、リスト 1 のように見える可能性があることに注意することが重要です。
リスト 1. JSON 形式の単純な JavaScript オブジェクト
コードをコピーします
コードは次のとおりです:
名前と値のペアとしてサーバー側に送信する場合は、次のようになります:
これは良さそうですしかし、問題があります。JSON データにはスペースやさまざまな文字が含まれるため、Web ブラウザーはコンパイルを続行する必要があることがよくあります。これらの文字がサーバー上で (またはサーバーへのデータ送信処理中に) 混乱を引き起こさないようにするには、JavaScript のエスケープ() 関数に次のコードを追加する必要があります:
この関数は、スペース、スラッシュ、およびブラウザに影響を与える可能性のあるその他のものを処理し、それらを Web で使用可能な文字に変換できます (たとえば、スペースは %20 に変換されますが、ブラウザは変換されません)。変更せずにサーバーに直接渡すのではなく、スペース処理として扱います)。その後、サーバーは送信後にそれらを (通常は自動的に) 元の「外観」に戻します。
このアプローチには 2 つの欠点があります:
GET リクエストを使用して大きなデータの塊を送信する場合、URL 文字列には長さの制限があります。この制限は広いですが、オブジェクトの JSON 文字列表現は、特に非常に複雑なオブジェクトを扱う場合、思ったよりも長くなる可能性があります。
ネットワーク経由ですべてのデータをプレーン テキストで送信する場合、データ送信の不安は対処しきれないほど大きくなります。
つまり、上記は GET リクエストの 2 つの制限であり、単に JSON データに関連する 2 つの制限ではありません。ユーザー名と姓だけではない、フォーム内の選択内容など、より多くのコンテンツを送信する場合、これら 2 つはもう少し注意が必要になる場合があります。機密コンテンツや非常に長いコンテンツを処理するには、POST リクエストを使用できます。
POSTリクエストを使用してJSONデータを送信します
POST リクエストを使用して JSON データをサーバーに送信することにした場合、以下に示すように、コードに多くの変更を加える必要はありません:
このコードの大部分は、POST リクエストの送信方法に焦点を当てた「Mastering Ajax、パート 3: Ajax の高度なリクエストとレスポンス」で見ており、よく知っているはずです。リクエストは GET ではなく POST を使用して開かれ、Content-Type ヘッダーは、取得できるデータをサーバーに事前に知らせるために設定されます。この場合、それは application/x-www-form-urlencoded であり、通常の HTML フォームからの場合と同様に、テキストが送信されていることをサーバーに知らせます。
もう 1 つの簡単なヒントは、URL の末尾に時間を追加することです。これにより、リクエストは最初に送信されたときにキャッシュされなくなりますが、このメソッドが呼び出されるたびに再作成されて再送信され、タイムスタンプが異なるため、URL はわずかに異なります。この手法は、スクリプトへの POST が実際に毎回新しいリクエストを生成し、Web サーバーがサーバーからの応答をキャッシュしようとしないようにするためによく使用されます。
JSONは単なるテキストです
GET を使用するか POST を使用するかに関係なく、重要な点は、JSON は単なるテキストであるということです。特別なコーディングは必要なく、すべてのサーバー側スクリプトでテキスト データを処理できるため、JSON を簡単に活用してサーバーに適用できます。 JSON がバイナリ形式または奇妙なテキスト エンコーディングである場合は、それほど単純ではありません。幸いなことに、JSON は単なる通常のテキスト データです (スクリプトは POST セクションでフォーム送信から受け取ることができ、Content-Type ヘッダーも で確認できます)。したがって、データをサーバーに送信するときにあまり心配する必要はありません。
サーバー上でJSONを解釈する
クライアント側の JavaScript コードを作成し、ユーザーが Web フォームや Web ページと対話できるようにし、処理のためにサーバー側のプログラムに送信するために必要な情報を収集すると、この時点でサーバーがアプリケーションになります (非同期で呼び出された場合)サーバー側プログラムを使用します。これは、私たちがいわゆる「Ajax アプリケーション」と考えるものの主役である可能性があります)。この時点で、クライアント側で行う選択 (JavaScript オブジェクトの使用や JSON 文字列への変換など) は、JSON データのデコードにどの API を使用するかなど、サーバー側で行う選択と一致する必要があります。
JSON を処理するための 2 つのステップ
サーバー側でどのような言語が使用されているかに関係なく、サーバー側で JSON を処理するには、基本的に 2 つの手順が必要です。
サーバー側プログラムの作成に使用される言語に対応する JSON パーサー/ツールボックス/ヘルパー API を見つけます。
JSON パーサー/ツールボックス/ヘルパー API を使用して、クライアントからリクエスト データを取得し、そのデータをスクリプトが理解できるデータに変換します。
上記はほぼ今知っておくべき一般的な内容です。次に、各ステップを詳しく紹介します。
JSONパーサーを探しています
JSON パーサーまたはツールキットを見つけるための最適なリソースは、JSON サイトです (リンクについては「参考文献」を参照)。 ここでは、形式そのものについてすべて学ぶことに加えて、ASP から Erlang、Pike、Ruby まで、JSON 用のさまざまなツールやパーサーへのリンクもあります。スクリプトを作成している言語に適したツールボックスをダウンロードするだけです。サーバー側のスクリプトとプログラムがこのツールボックスを使用できるようにするには、必要に応じてツールボックスを選択、拡張、またはインストールできます (サーバー側で C#、PHP、または Lisp を使用している場合はより柔軟になります)。
たとえば、PHP を使用している場合は、PHP 5.2 にアップグレードするだけで使用できます。この最新バージョンの PHP には、デフォルトで JSON 拡張機能が含まれています。実際、これは PHP を使用するときに JSON を処理する最良の方法です。 Java サーブレットを使用している場合は、json.org にある org.json パッケージを選択するのが明らかです。この場合、JSON Web サイトから json.zip をダウンロードし、それに含まれるソース ファイルをプロジェクトのビルド ディレクトリに追加できます。これらのファイルをコンパイルすると、すべての準備が整います。サポートされている他の言語でも同じ手順を使用できます。使用する言語は言語の習熟度によって異なります。使い慣れた言語を使用するのが最善です。
JSONパーサーを使用する
プログラムで利用可能なリソースを取得したら、あとは呼び出す適切なメソッドを見つけるだけです。たとえば、PHP の JSON-PHP テンプレートを使用しているとします。
このテンプレートを使用すると、取得したすべてのデータ (配列形式、複数行、単一値、または JSON データ構造のもの) をネイティブ PHP 形式に変換し、$value 変数に配置できます。
org.json パッケージがサーブレットで使用されている場合、次のコードが使用されます: