|
Json-lib はJavaでJSON形式を取り扱うためのライブラリです。Javaオブジェクト<->JSON形式の表現の相互変換を行うことができます。 インストール †https://sourceforge.net/project/showfiles.php?group_id=171425よりバイナリをダウンロードできます。また依存ライブラリはhttp://json-lib.sourceforge.net/dependencies.html にあるとおり などです。 いろいろなJavaオブジェクトをJSON形式で出力してみる †Json-libを使っていろいろなJavaオブジェクトをJSON形式で出力してみました。 配列を出力してみる †boolean[] boolArray = new boolean[] { true, false, true };
JSONArray jsonArray = JSONArray.fromObject(boolArray);
System.out.println(jsonArray);
結果 [true,false,true] キーを持たない配列はこのように記述するんですね。 リストを出力してみる † List list = new ArrayList();
list.add("first");
list.add("second");
JSONArray jsonArray = JSONArray.fromObject(list);
System.out.println(jsonArray);
結果 ["first","second"] 配列と同じですね。当たり前ですが。 Mapを出力してみる †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オブジェクトを出力してみる †対象のJavaのモデルはUser,CustomerというHibernate/マッピング定義についてで書いたモデルを使用します。 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オブジェクトを生成する †いままでは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インスタンスを作成しています。 2009/03/18追記 †久しぶりに触ってみたら、モジュールが色々バージョンアップしてるみたいですね。今触ってるのは、2.2.3なのですが、JSONObject#fromString はなくなってるようで、 JSONObject jsonObject = JSONObject.fromObject(json); を使用するようです。 JSON形式のオブジェクトから、Javaオブジェクトを復元する †JavaオブジェクトからJSON形式に変換することはできましたが、逆にJSON形式の文字列からJavaオブジェクトを復元することもできます。対象のモデルを public class BeanA {
private boolean bool;
private int integer;
private String str;
public boolean isBool() { return bool; }
public int getInteger() { return integer; }
public String getString() { return str; }
public void setBool(boolean bool) { this.bool = bool; }
public void setInteger(int integer) { this.integer = integer; }
public void setString(String str){ this.str=str; }
}
とします。このクラスのインスタンスをJSON形式の文字列から取得するには以下のようにします。 String json = "{bool:true,integer:1,string:\"json\"}";<-JSON形式の文字列
JSONObject jsonObject = JSONObject.fromString(json);
System.out.println(jsonObject);
BeanA bean = (BeanA) JSONObject.toBean(jsonObject, BeanA.class); <-これ
System.out.println(bean.getInteger());
System.out.println(bean.getString());
System.out.println(bean.isBool());
結果 {"string":"json","integer":1,"bool":true}
1
json
true
このように JSONObject.toBean([JSONObjectのインスタンス], [復元したいオブジェクト].class); メソッドでインスタンスを取得することができます。 コンテンツ一覧 †この記事は
現在のアクセス:91861 |