JSON/Json-libを使う/JSONからJavaへいろんな変換
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
// 下階層用テンプレート
#topicpath
----
//ここにコンテンツを記述します。
#contents
以下のような親子モデルで、ネストしたオブジェクトが正しく...
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...
System.out.println(p);
結果
{"child":{"name":"子の名前"},"name":"親の名前","id":0}
Parent@6e70c7[id=0,name=親の名前,child=Child@1d63e39[nam...
うまくいきました。
***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 = chi...
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...
System.out.println(p);
結果
{"list":[{"name":"子の名前"}],"name":"親の名前","id":0}
Parent@12a1e44[id=0,name=親の名前,list=[net.sf.json.util...
{name=子の名前}
]]]
ChildをListに追加しているのですが、逆変換したオブジェクト...
"list":[{"name":"子の名前"}]
とParentクラスだけだと、Listの中身がChildだって情報がない...
***Listなどのマッピングについて 2009/03/18 追記 [#r3749118]
久しぶりに触ってみたら、モジュールが色々バージョンアップ...
また色々ググってたら、''フィールドの java.util.List をビ...
private JsonConfig createConfig() {
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setRootClass(Parent.class);
Map<String, Class> classMap = new HashMap<String, Clas...
classMap.put("list", Child.class);
jsonConfig.setClassMap(classMap);
return jsonConfig;
}
としてJsonConfigインスタンスを作成します。ポイントは
classMap.put("list", Child.class);
として''フィールドの変数名とそのフィールドにマッピングし...
JsonConfig jsonConfig = createConfig();
Parent p = (Parent) JSONObject.toBean(jsonObject, jsonCo...
としてJsonConfigをわたしながらtoBeanを実行するだけですね...
Parent p = (Parent) JSONObject.toBean(jsonObject, Parent...
として引数にParent.classを指定してましたが、今回Parent.cl...
実行結果は以下の通り:
Parent@8ab08f[id=0,name=親の名前,list=[Child@a5af9f[name...
指定通りChildクラスにマップされました!賢いですねー。
ちなみにJsonConfigには[[Javaのフィールド名とJSON内のキー...
参考
-[[Json-lib に手を出す - 自堕落な投資ずきSEの日記>http://...
***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 =...
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...
System.out.println(p);
結果
2006/12/31 18:01:40 org.apache.commons.beanutils.Propert...
致命的: Method invocation failed.
java.lang.IllegalArgumentException: argument type mismatch
BeanUtilsが例外になっちゃいました。
***Setのマッピングについて 2009/03/18 追記 [#sd2894e3]
先の例と同じでJsonConfigで
Map<String, Class> classMap = new HashMap<String, Class>...
classMap.put("children", Child.class);
jsonConfig.setClassMap(classMap);
とすることで、実行すると
Parent@4d921a[id=0,name=親の名前,children=[Child@4c6320[...
正しく動くことが確認できました。上の例外の件はとりあえず...
***配列 [#m3694282]
配列も同じですね。ダメですねぇ。
:2009/03/18追記|配列も正しく動きます。実際実行してみると、
Parent@8ab08f[id=0,name=親の名前,children={Child@a5af9f[...
となりOKそうですね。
***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 =...
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...
System.out.println(p);
結果
{"name":"親の名前","id":0,"children":{"child1":{"name":"...
Parent@b1b4c3[id=0,name=親の名前,children={child1=net.sf...
{name=子の名前}
]}]
例によってkey=child1とともに代入されたChildはnet.sf.json....
***Mapのマッピングについて 2009/03/18 追記 [#na202aec]
先のJsonConfigクラスを使用することでうまくマッピングする...
private static JsonConfig createConfig() {
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setRootClass(Parent.class);
Map<String, Class> classMap = new HashMap<String, Clas...
classMap.put("child1", Child.class);
jsonConfig.setClassMap(classMap);
return jsonConfig;
}
このように、child1に対してChildクラスですよって指定をする...
Parent@672bbb[id=0,name=親の名前,children={child1=Child@...
となりました。。Mapのキーが増えていっても、
classMap.put("child1", Child.class);
classMap.put("child2", Child.class);
のようにそれぞれにマップするクラスを指定すれば良いみたい...
**関連リンク [#r563fb35]
-[[Javaのフィールド名とJSON内のキー値をマッピング>JSON/Js...
----
この記事は
#vote(おもしろかった[13],そうでもない[1])
-やり方が悪いような気がするなあ。。でも時間切れ。。。 -- ...
- Enumは? -- [[とおりすがり]] &new{2007-03-09 (金) 09:16...
#comment
#topicpath
SIZE(10){現在のアクセス:&counter;}
終了行:
// 下階層用テンプレート
#topicpath
----
//ここにコンテンツを記述します。
#contents
以下のような親子モデルで、ネストしたオブジェクトが正しく...
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...
System.out.println(p);
結果
{"child":{"name":"子の名前"},"name":"親の名前","id":0}
Parent@6e70c7[id=0,name=親の名前,child=Child@1d63e39[nam...
うまくいきました。
***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 = chi...
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...
System.out.println(p);
結果
{"list":[{"name":"子の名前"}],"name":"親の名前","id":0}
Parent@12a1e44[id=0,name=親の名前,list=[net.sf.json.util...
{name=子の名前}
]]]
ChildをListに追加しているのですが、逆変換したオブジェクト...
"list":[{"name":"子の名前"}]
とParentクラスだけだと、Listの中身がChildだって情報がない...
***Listなどのマッピングについて 2009/03/18 追記 [#r3749118]
久しぶりに触ってみたら、モジュールが色々バージョンアップ...
また色々ググってたら、''フィールドの java.util.List をビ...
private JsonConfig createConfig() {
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setRootClass(Parent.class);
Map<String, Class> classMap = new HashMap<String, Clas...
classMap.put("list", Child.class);
jsonConfig.setClassMap(classMap);
return jsonConfig;
}
としてJsonConfigインスタンスを作成します。ポイントは
classMap.put("list", Child.class);
として''フィールドの変数名とそのフィールドにマッピングし...
JsonConfig jsonConfig = createConfig();
Parent p = (Parent) JSONObject.toBean(jsonObject, jsonCo...
としてJsonConfigをわたしながらtoBeanを実行するだけですね...
Parent p = (Parent) JSONObject.toBean(jsonObject, Parent...
として引数にParent.classを指定してましたが、今回Parent.cl...
実行結果は以下の通り:
Parent@8ab08f[id=0,name=親の名前,list=[Child@a5af9f[name...
指定通りChildクラスにマップされました!賢いですねー。
ちなみにJsonConfigには[[Javaのフィールド名とJSON内のキー...
参考
-[[Json-lib に手を出す - 自堕落な投資ずきSEの日記>http://...
***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 =...
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...
System.out.println(p);
結果
2006/12/31 18:01:40 org.apache.commons.beanutils.Propert...
致命的: Method invocation failed.
java.lang.IllegalArgumentException: argument type mismatch
BeanUtilsが例外になっちゃいました。
***Setのマッピングについて 2009/03/18 追記 [#sd2894e3]
先の例と同じでJsonConfigで
Map<String, Class> classMap = new HashMap<String, Class>...
classMap.put("children", Child.class);
jsonConfig.setClassMap(classMap);
とすることで、実行すると
Parent@4d921a[id=0,name=親の名前,children=[Child@4c6320[...
正しく動くことが確認できました。上の例外の件はとりあえず...
***配列 [#m3694282]
配列も同じですね。ダメですねぇ。
:2009/03/18追記|配列も正しく動きます。実際実行してみると、
Parent@8ab08f[id=0,name=親の名前,children={Child@a5af9f[...
となりOKそうですね。
***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 =...
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...
System.out.println(p);
結果
{"name":"親の名前","id":0,"children":{"child1":{"name":"...
Parent@b1b4c3[id=0,name=親の名前,children={child1=net.sf...
{name=子の名前}
]}]
例によってkey=child1とともに代入されたChildはnet.sf.json....
***Mapのマッピングについて 2009/03/18 追記 [#na202aec]
先のJsonConfigクラスを使用することでうまくマッピングする...
private static JsonConfig createConfig() {
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setRootClass(Parent.class);
Map<String, Class> classMap = new HashMap<String, Clas...
classMap.put("child1", Child.class);
jsonConfig.setClassMap(classMap);
return jsonConfig;
}
このように、child1に対してChildクラスですよって指定をする...
Parent@672bbb[id=0,name=親の名前,children={child1=Child@...
となりました。。Mapのキーが増えていっても、
classMap.put("child1", Child.class);
classMap.put("child2", Child.class);
のようにそれぞれにマップするクラスを指定すれば良いみたい...
**関連リンク [#r563fb35]
-[[Javaのフィールド名とJSON内のキー値をマッピング>JSON/Js...
----
この記事は
#vote(おもしろかった[13],そうでもない[1])
-やり方が悪いような気がするなあ。。でも時間切れ。。。 -- ...
- Enumは? -- [[とおりすがり]] &new{2007-03-09 (金) 09:16...
#comment
#topicpath
SIZE(10){現在のアクセス:&counter;}
ページ名: