// 下階層用テンプレート
#topicpath
----
//ここにコンテンツを記述します。
#contents

[[Json-lib>http://json-lib.sourceforge.net/]] はJavaでJSON形式を取り扱うためのライブラリです。Javaオブジェクト<->JSON形式の表現の相互変換を行うことができます。

**インストール [#f3d0cc89]
https://sourceforge.net/project/showfiles.php?group_id=171425よりバイナリをダウンロードできます。また依存ライブラリはhttp://json-lib.sourceforge.net/dependencies.html
にあるとおり
-commons-beanutils	1.7.0
-commons-lang	2.2
-[[ezmorph>http://ezmorph.sourceforge.net/]]	0.9.2
-[[xom>http://www.ibiblio.org/xml/XOM/]]	1.1
-junit	3.8.1(オプション)
-oro	2.0.8(オプション)

などです。

**いろいろなJavaオブジェクトをJSON形式で出力してみる [#f321f685]
Json-libを使っていろいろなJavaオブジェクトをJSON形式で出力してみました。

***配列を出力してみる [#nf5f11f2]
 boolean[] boolArray = new boolean[] { true, false, true };
 JSONArray jsonArray = JSONArray.fromObject(boolArray);
 System.out.println(jsonArray);
結果
 [true,false,true]
キーを持たない配列はこのように記述するんですね。

***リストを出力してみる [#b60539bc]
  List list = new ArrayList();
  list.add("first");
  list.add("second");
  JSONArray jsonArray = JSONArray.fromObject(list);
  System.out.println(jsonArray);
結果
 ["first","second"]
配列と同じですね。当たり前ですが。

***Mapを出力してみる [#hbd9392e]
 Map map = new HashMap();
 map.put("name", "json");
 map.put("bool", Boolean.TRUE);
 map.put("int", new Integer(1));
 map.put("arr", new String[] { "a", "b" });
 map.put("chars", new char[] { 'a', 'b' });
結果
 {"chars":["a","b"],"arr":["a","b"],"int":1,"name":"json","bool":true}
記述がネスト化されていまて、さらに{"key":"value"}という構造になっています。だんだんJavaのオブジェクト表現に近くなってきました。


***Javaオブジェクトを出力してみる [#m889771d]
対象のJavaのモデルはUser,Customerという[[Hibernate/マッピング定義について>Hibernate/マッピング定義について#j4e88693]]で書いたモデルを使用します。
 User user = new User();
 user.setName("ユーザ1");
 user.setAddress("東京都江東区");
 
 Customer c1 = new Customer();
 c1.setName("顧客1");
 Customer c2 = new Customer();
 c2.setName("顧客2");
 
 Set<Customer> set = new HashSet<Customer>();
 set.add(c1);
 set.add(c2);
 user.setCustomers(set);
 
 JSONObject jsonObject = JSONObject.fromObject(user);
 System.out.println(jsonObject);
結果
 { "customers":[
     {"user":null,"name":"顧客1","id":0},
     {"user":null,"name":"顧客2","id":0}
   ],
   "address":"東京都江東区",
   "name":"ユーザ1",
   "id":0
 }  (整形してます)
Setを使ったモデル内のモデルSetも、ネスト構造を用いてうまく表現されていますね。

***JSON形式の文字列からJSONオブジェクトを生成する [#xd03107f]
いままではJavaオブジェクトからJSONObjectのインスタンスを作成しました。もちろんJSON形式の文字列からJSONObjectのインスタンスを作成することもできます。
 jsonObject = JSONObject
  .fromString("{\"customers\":[{\"user\":null,\"name\":\"顧客1\",\"id\":0},
               {\"user\":null,\"name\":\"顧客2\",\"id\":0}],
               \"address\":\"東京都江東区\",\"name\":
               \"ユーザ1\",\"id\":0}"); //ここは一行で。
 System.out.println(jsonObject);
結果
 { "customers":[
     {"user":null,"name":"顧客1","id":0},
     {"user":null,"name":"顧客2","id":0}
   ],
   "address":"東京都江東区",
   "name":"ユーザ1",
   "id":0
 }  (整形してます)
¥でエスケープしてるのでわかりにくいですがさっきのJavaモデルのJSON形式を引数に渡して、JSONObjectインスタンスを作成しています。





----
この記事は
#vote(おもしろかった,そうでもない)
-はじめ char[]で例外となり、プリミティブの配列はサポートされない?と思ったのですが、ダウンロードしたcommons-langが古いだけでした。最新版はOKでしたね -- [[きの]] &new{2006-12-30 18:36:36 (土)};

#comment
#topicpath


SIZE(10){現在のアクセス:&counter;}


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS