XML にクロスプラットフォームおよびクロス言語の利点があることはよく知られていますが、XML が Web サービスに適用されない限り、通常の Web アプリケーションでは、XML が生成されたかどうかに関係なく、開発者は XML の解析に苦労することがよくあります。サーバー側で XML を処理する場合も、クライアントが JavaScript を使用して XML を解析する場合も、多くの場合コードが複雑になり、開発効率が非常に低くなります。実際、ほとんどの Web アプリケーションでは、データの送信に複雑な XML はまったく必要ありません。XML の拡張性が有利になることはほとんどありません。また、多くの AJAX アプリケーションは、動的な Web ページを構築するために HTML フラグメントを直接返すことさえあります。 XML を返して解析する場合と比較して、HTML フラグメントを返すとシステムの複雑さは大幅に軽減されますが、ある程度の柔軟性にも欠けます。
JSON は、Web アプリケーション開発者に代替のデータ交換形式を提供するようになりました。 JSON が正確に何であるかを見てみましょう。JSON は、XML や HTML フラグメントよりも優れたシンプルさと柔軟性を提供します。
Ajax リソース センター
ドキュメント、チュートリアル、フォーラム、ブログ、Wiki、ニュースなど、Ajax プログラミング モデルに関する情報を入手できるワンストップ センターである Ajax リソース センターにアクセスしてください。 Ajax に関する新しい情報はここで見つけることができます。
JSON データ形式の分析
XML と同様、JSON もプレーン テキストに基づくデータ形式です。 JSON は本質的に JavaScript 用に用意されているため、JSON のデータ形式は非常に単純です。JSON を使用して、単純な文字列、数値、ブール値、配列、または複雑なオブジェクトを送信できます。
文字列、数値、ブール値は JSON で非常に簡単に表現できます。たとえば、JSON を使用して単純な文字列「abc」を表すと、その形式は次のようになります:
"abc"
文字 "、、/、およびいくつかの制御文字 (、f、
、
、 ) はエンコードする必要がありますが、他の Unicode 文字は直接出力できます。次の図は、文字列の完全な表現構造です。
図 1. 文字列の完全な表現構造
数値は、整数または浮動小数点数に従って次のように表現できます。
図 2.数値の表現構造
これは、ほとんどのプログラミング言語の表現方法と一致しています。例:
12345 (整数)
-3.9e10 (浮動小数点数)
ブール型は true として表現されます。または偽。さらに、JavaScript の null は null として表されます。true、false、および null には二重引用符がありません。二重引用符がなければ、文字列として扱われることに注意してください。
JSON は、[] を使用してすべての要素を含む配列オブジェクトを表すこともできます。各要素はカンマで区切られ、要素には任意の値を指定できます。たとえば、次の配列には文字列、数値、ブール値、および null が含まれます。
["abc",12345,false,null]
オブジェクト オブジェクトは、順序のない一連の Key-Value ペアを含む {} によって JSON で表現されます。実際、ここでのオブジェクトは Java のオブジェクトと同等です。 Java のクラスではなく、マップ
たとえば、Address オブジェクトには次の Key-Value が含まれます:
city:Beijing
street:Chaoyang Road
postcode:100025 (integer)
JSON では次のように表されます:
{"city ":"Beijing","street":"Chaoyang Road ","postcode":100025}
値は別のオブジェクトまたは配列にすることもできます。したがって、複雑なオブジェクトをネストして、たとえば次のように表すことができます。人物オブジェクト 次のように表現できる名前と住所のオブジェクトが含まれています:
{"name":"Michael","address":
{"city":"Beijing","street":" Chaoyang Road ","postcode" :100025}
}
JavaScript による JSON データの処理
上記では、JSON を使用してデータを表現する方法を紹介しました。次に、データを生成する方法も解決する必要があります。クライアントに送信するサーバー側の JSON 形式のデータと、クライアントが JavaScript を使用して JSON 形式のデータを処理する方法。
まず、JavaScript を使用して Web ページ内の JSON データを処理する方法について説明します。クライアントが簡単な JavaScript メソッドを通じてユーザーに JSON データをどのように表現するかを確認できます。
function handleJson() {
var j={"name":"Michael","address":
{" city":"北京","street":"朝陽路","郵便番号":100025}
};
document.write(j.name);
document.write(j .address. city);
}
サーバーから返された JSON データは次のとおりであると仮定します:
{"name":"Michael","address":
{"city":"Beijing " ,"street":" 朝陽路 ","postcode":100025}
}
JavaScriptの変数に代入するだけで、すぐに変数を使用してページ上の情報を更新できます。 JSON を使用して DOM からさまざまなノードを読み取るのは非常に簡単です。必要なのは、Ajax リクエストを送信し、サーバーから返された JSON データを変数に割り当てることだけです。 JSON データを処理する機能をすでに備えている Ajax フレームワークが多数あります。たとえば、Prototype (人気のある JavaScript ライブラリ: http://prototypejs.org) は、メソッドから返された JSON テキストを直接変換できる evalJSON() メソッドを提供します。サーバーを JavaScript 変数に変換します。 :
new Ajax.Request("http://url", {
method: "get",
onSuccess: function(transport) {
var json = Transport .responseText.evalJSON() ;
// TODO: document.write(json.xxx)
}
サーバー側で JSON 形式のデータを出力します
サーバーがデータを JSON 形式で出力する方法について説明します。Java を例として、Java オブジェクトを JSON 形式のテキストにエンコードする方法を説明します。
String オブジェクトを JSON 形式にエンコードする場合、処理する必要があるのは特殊文字のみです。さらに、文字列は (') ではなく (") で表す必要があります:
static String string2Json(String s) {
StringBuilder sb = new StringBuilder(s.length() 20);
sb.append('"');
for ( int i=0 ; i
case '"':
sb. append("\ "");
break;
case '\':
sb.append("\\");
break;
case '/':
sb.append( "\/");
break;
case 'b':
sb.append("\b"); 🎜>sb.append("\f");
break;
sb.append("\n"); :
sb.append("\r");
break;
case 't':
sb.append("\t");
sb.append(c);
}
}
sb.append('"');
return sb.toString();
}
数値を JSON として表現する方がはるかに簡単で、整数、長整数、浮動小数点などのさまざまな数値形式を処理できます。
コードをコピーします。
コードをコピー
コードをコピー
sb.setCharAt(sb.length()-1, ']');
return sb.toString();
}
最後に、Map
コードをコピーします
コードは次のとおりです:
static String map2Json (Map
sb.append(':'); >sb.append( toJson(value));
sb.append(',');
}
// 最後の ',' を '}' に変更します:
sb.setCharAt( sb.length( )-1, '}');
return sb.toString();
Java オブジェクトを均一に処理するために、エントリ メソッドを作成します。 toJson(Object)、任意の Java オブジェクトを JSON 形式にエンコードできます:
コードをコピー
コードは次のとおりです:
public static String toJson(Object o) {
return "null";
if (oinstanceof String)
Java オブジェクトに対して厳密なチェックは実行しません。サポートされていないオブジェクト (List など) は直接 RuntimeException をスローします。さらに、出力 JSON が有効であることを確認するために、Map
サーバーが処理します。JSON データは最終的には単純な JavaScript オブジェクトに変換されるため、再帰参照の可能性はほとんどありません。
最後に、サーブレットまたは MVC フレームワークを通じて JSON を出力する場合、正しい MIME タイプ (application/json) と文字エンコーディングを設定する必要があります。サーバーが UTF-8 エンコーディングを使用していると仮定すると、次のコードを使用して、エンコードされた JSON テキストを出力できます:
コードは次のとおりです:概要