JSON - JavaScript言語のサブセットとして定義された軽量のデータフォーマット †Ajaxなどでデータ通信を行う場合、XMLだと解析(parse)やjavaScriptオブジェクト(配列)への変換が必要だが、 ※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 ); 【注意点】 [ 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 ); } |