- 追加された行はこの色です。
- 削除された行はこの色です。
[[JSON/Json-libを使う/JSONからJavaへいろんな変換]]
// 下階層用テンプレート
#topicpath
----
//ここにコンテンツを記述します。
#contents
以下のような親子モデルで、ネストしたオブジェクトが正しく変換されるか、配列やListやSetなどが正しく変換されるか試してみます。
public class Parent {
private String name;
private int id;
private Child child;
public Child getChild() { return child; }
public void setChild(Child child) { this.child = child;}
public int getId() { return id;}
public void setId(int id) { this.id = id;}
public String getName() { return name;}
public void setName(String name) { this.name = name;}
public String toString() {
return new ToStringBuilder(this).
append("id", getId()).append("name",
getName()).append("child", getChild()).toString();
}
}
public class Child {
private String name;
public String getName() { return name;}
public void setName(String name) { this.name = name;}
public String toString() {
return new ToStringBuilder(this)
.append("name", getName()).toString();
}
}
***ネストしたオブジェクト [#j4880f41]
Parent parent = new Parent();
parent.setId(0);
parent.setName("親の名前");
Child child = new Child();
child.setName("子の名前");
parent.setChild(child);
JSONObject jsonObject = JSONObject.fromObject(parent);
System.out.println(jsonObject);
Parent p = (Parent) JSONObject.toBean(jsonObject, Parent.class);
System.out.println(p);
結果
{"child":{"name":"子の名前"},"name":"親の名前","id":0}
Parent@6e70c7[id=0,name=親の名前,child=Child@1d63e39[name=子の名前]]
うまくいきました。
***java.util.List [#we6c4678]
java.util.Listを追加しました。
public class Parent {
private String name;
private int id;
private List list; //追加
public List getList() {return list;} //追加
public void setList(List list) {this.list = list;} //追加
//private Child child;
//public Child getChild() { return child; }
//public void setChild(Child child) { this.child = child;}
public int getId() { return id;}
public void setId(int id) { this.id = id;}
public String getName() { return name;}
public void setName(String name) { this.name = name;}
public String toString() {
return new ToStringBuilder(this).append("id", getId())
.append("name",getName())
.append("list", list).toString();
}
}
これでやってみると、、
Parent parent = new Parent();
parent.setId(0);
parent.setName("親の名前");
Child child = new Child();
child.setName("子の名前");
List<Child> list = new ArrayList<Child>();
list.add(child);
parent.setList(list);
JSONObject jsonObject = JSONObject.fromObject(parent);
System.out.println(jsonObject);
Parent p = (Parent) JSONObject.toBean(jsonObject, Parent.class);
System.out.println(p);
結果
{"list":[{"name":"子の名前"}],"name":"親の名前","id":0}
Parent@12a1e44[id=0,name=親の名前,list=[net.sf.json.util.JSONDynaBean@1ad77a7[
{name=子の名前}
]]]
ChildをListに追加しているのですが、逆変換したオブジェクトはChildではなくnet.sf.json.util.JSONDynaBean になっちゃいました。まあ
"list":[{"name":"子の名前"}]
とParentクラスだけだと、Listの中身がChildだって情報がないから、当たり前ですね。。
***java.util.Set [#a5717541]
java.util.Listをjava.util.Setに変えてみました。
public class Parent {
private String name;
private int id;
private Set children;
public Set getChildren() {return children;}
public void setChildren(Set children) {this.children = children;}
public int getId() { return id;}
public void setId(int id) { this.id = id;}
public String getName() { return name;}
public void setName(String name) { this.name = name;}
public String toString() {
return new ToStringBuilder(this).append("id", getId())
.append("name",getName())
.append("children", children).toString();
}
}
これでやってみると、、
Parent parent = new Parent();
parent.setId(0);
parent.setName("親の名前");
Child child = new Child();
child.setName("子の名前");
Set<Child> children = new HashSet<Child>();
children.add(child);
parent.setChildren(children);
JSONObject jsonObject = JSONObject.fromObject(parent);
System.out.println(jsonObject);
Parent p = (Parent) JSONObject.toBean(jsonObject, Parent.class);
System.out.println(p);
結果
2006/12/31 18:01:40 org.apache.commons.beanutils.PropertyUtilsBean invokeMethod
致命的: Method invocation failed.
java.lang.IllegalArgumentException: argument type mismatch
BeanUtilsが例外になっちゃいました。
***配列 [#m3694282]
配列も同じですね。ダメですねぇ。
***java.util.Map [#ge97d174]
java.util.Setをjava.util.Mapに変えてみました。
public class Parent {
private String name;
private int id;
private Map children;
public Map getChildren() {return children;}
public void setChildren(Map children) {this.children = children;}
public int getId() { return id;}
public void setId(int id) { this.id = id;}
public String getName() { return name;}
public void setName(String name) { this.name = name;}
public String toString() {
return new ToStringBuilder(this).append("id", getId())
.append("name",getName())
.append("children", children).toString();
}
}
これでやってみると、、
Parent parent = new Parent();
parent.setId(0);
parent.setName("親の名前");
Child child = new Child();
child.setName("子の名前");
Map children = new HashMap();
children.put("child1", child);
parent.setChildren(children);
JSONObject jsonObject = JSONObject.fromObject(parent);
System.out.println(jsonObject);
Parent p = (Parent) JSONObject.toBean(jsonObject, Parent.class);
System.out.println(p);
結果
{"name":"親の名前","id":0,"children":{"child1":{"name":"子の名前"}}}
Parent@b1b4c3[id=0,name=親の名前,children={child1=net.sf.json.util.JSONDynaBean@1efb836[
{name=子の名前}
]}]
例によってkey=child1とともに代入されたChildはnet.sf.json.util.JSONDynaBeanになっちゃいましたが、一応正常終了ですね。
----
この記事は
#vote(おもしろかった,そうでもない)
-やり方が悪いような気がするなあ。。でも時間切れ。。。 -- [[きの]] &new{2006-12-31 23:10:37 (日)};
#comment
#topicpath
SIZE(10){現在のアクセス:&counter;}