JSON - JavaScript言語のサブセットとして定義された軽量のデータフォーマット

Ajaxなどでデータ通信を行う場合、XMLだと解析(parse)やjavaScriptオブジェクト(配列)への変換が必要だが、
JSONはJavaScriptのサブセットである為、Ajaxの戻り値として取得した文字列をevalするだけで、そのまま JavaScriptで使えてしまう。
また JSON-lib 等のデータ変換ライブラリの登場によって、さらに注目を集めている。

※JSON-lib ・・・ JavaBeans、MAP、コレクション、配列、XMLデータなどをJSONデータへ変換するためのJavaライブラリ。

◆AjaxでJSONデータを取得する例(JavaScript側)

var ajax = false;

// IE以外
if(window.XMLHttpRequest) {
   ajax = new XMLHttpRequest();
// IE用
} else if(window.ActiveXObject) {
   try {
      ajax = new ActiveXObject("Msxml2.XMLHTTP");
   } catch(e) {
      ajax = new ActiveXObject("Microsoft.XMLHTTP");
   }
}

ajax.open("POST",'xxxxxxxxxxxx.do');
ajax.onreadystatechange = function() {
	if (ajax.readyState == 4 && ajax.status == 200) {
		var obj = document.getElementById(objID);
		data = eval("(" + ajax.responseText + ")");
		/* json.jsを利用する場合 */
		// data = req.responseText.parseJSON();
	}
}
ajax.send(null);

◆JSON-libの使用例(サーバサイド)

  [ JSON文字列を生成する例 ]

JSONObject obj = new JSONObject();
// プロパティを登録
obj.put( "id", 1 );
obj.put( "data", "データ1" );
// JSON文字列を生成
System.out.println( obj.toString() );

  [ JavaBeanからJSON文字列を生成する例 ]

DataBean bean = new DataBean( 1, "データ1" );
// JavaBeanからJSON文字列を生成
JSONObject obj = JSONObject.fromBean( bean );
System.out.println( obj.toString() );

  [ Java配列からJSON文字列を生成する例]

DataBean db1 = new DataBean( 1, "データ1" );
DataBean db2 = new DataBean( 2, "データ2" );
DataBean[] data = new DataBean[] { db1, db2 };
JSONArray array = JSONArray.fromObject( data );

  [ コレクションからJSON文字列を生成 ]

ArrayList list = new ArrayList();
list.add( new DataBean( 1, "データ1" ) );
list.add( new DataBean( 2, "データ2" ) );
JSONArray array = JSONArray.fromCollection( list );

  [ オブジェクト定義からJavaBeanを生成]

String json = JavaScriptから取得したオブジェクト定義のJSON文字列;
JSONObject obj  = new JSONObject( json );
DataBean   bean = (DataBean)JSONObject.toBean( obj, DataBean.class );
System.out.println( bean.toString() );

  [ 配列定義からJava配列(要素はDataBeanクラス)を生成 ]

String json = JavaScriptから取得した配列定義のJSON文字列;
JSONArray obj  = new JSONArray( json );
Object[] data = JSONArray.toArray( obj, DataBean.class );
// 配列定義からリストを生成する場合はtoList()メソッドを実行
List list = JSONArray.toList( obj, DataBean.class );
for( Object o : data )  System.out.println( (DataBean)o );

【注意点】
 ブラウザによっては,JavaScriptでの処理で他の文字コードを扱えない場合がある為、JSON文字列の送受信はUTF-8で行うようにする。
 サーバサイドでは送信する文字列をUTF-8にエンコードや、Content-Typeヘッダで charset=UTF-8 の追加等が必要。

  [ JSON文字列をXMLHttpRequestに送信する(サーバサイド) ]

response.setContentType( "application/json; charset=UTF-8" );
out.print( JSON文字列 );   // JSON文字列はUTF-8に変換済みとする
out.close();

  [ JSON文字列を受信してJavaオブジェクトに変換(サーバサイド) ]

String json = request.getParameter( "data" );
if ( json != null )  {
  json = new String( json.getBytes( "ISO-8859-1" ), "UTF-8" );
  JSONObject obj = JSONObject.fromString( json );
  DataBean data = (DataBean)JSONObject.toBean( obj, DataBean.class );
}

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-06-11 (木) 00:48:33 (5605d)