- 追加された行はこの色です。
- 削除された行はこの色です。
- JSON へ行く。
** JSON - JavaScript言語のサブセットとして定義された軽量のデータフォーマット [#wf8dd7b7]
#setlinebreak(on);
Ajaxなどでデータ通信を行う場合、XMLだと解析(parse)やjavaScriptオブジェクト(配列)への変換が必要だが、
JSONはJavaScriptのサブセットである為、Ajaxの戻り値として取得した文字列をevalするだけで、そのまま JavaScriptで使えてしまう。
また、JSON-lib 等のデータ変換ライブラリの登場によって、さらに注目を集めている。
また 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 );
}