Top / JSON / Json-libを使う / JavaからJSONへいろんな変換

以下のような親子モデルで、ネストしたオブジェクトが正しく変換されるか、配列や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();
  }
}

ネストしたオブジェクト

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);

結果

{"child":{"name":"子の名前"},"name":"親の名前","id":0}

{"フィールド名":value}というJSON形式に変換されました。Childクラスであるchildフィールドも、ちゃんとネストして変換されていますね。

java.util.List

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);
list.add(child);
parent.setList(list);

JSONObject jsonObject = JSONObject.fromObject(parent);
System.out.println(jsonObject);

結果

{"list":[{"name":"子の名前"},{"name":"子の名前"}],"name":"親の名前","id":0}

listフィールドは

"list":[{"name":"子の名前"},{"name":"子の名前"}]

というように配列表現に変換されていますね。まあ想定通りですね。

配列

java.util.Listを配列にしました。

public class Parent {
  private String name;
  private int id;
  private Child[] children;
  
  public Child[] getChildren() { return children;}
  public void setChildren(Child[] 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("子の名前");
parent.setChildren(new Child[] { child, child });

JSONObject jsonObject = JSONObject.fromObject(parent);
System.out.println(jsonObject);

結果

{"name":"親の名前","id":0,"children":[{"name":"子の名前"},{"name":"子の名前"}]}

配列childrenは

"children":[{"name":"子の名前"},{"name":"子の名前"}]

となり、JSONの配列になっていますね。

java.util.Set

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);

結果

{"name":"親の名前","id":0,"children":[{"name":"子の名前"}]}

Setは配列になりました。なるほど。

java.util.Map

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);
children.put("child2", child);
parent.setChildren(children);

JSONObject jsonObject = JSONObject.fromObject(parent);
System.out.println(jsonObject);

結果

{"name":"親の名前","id":0,
 "children":{"child1":{"name":"子の名前"},
             "child2":{"name":"子の名前"}
            }
} (整形してます)

Childを格納してたMapは

 "children":{"child1":{"name":"子の名前"},
             "child2":{"name":"子の名前"}

とネストされたJSON形式に変換されました。なるほど。


この記事は

選択肢 投票
おもしろかった 53  
そうでもない 8  
  • byte[]とかは?BLOBとかは?バイナリ系も確認しなくちゃね。 -- きの? 2007-01-09 (火) 09:50:20
  • asdfasdf -- asdfasdf? 2016-10-27 (木) 10:18:11
  • asdfasdf -- asdfasdf? 2016-10-27 (木) 10:18:14

Top / JSON / Json-libを使う / JavaからJSONへいろんな変換

現在のアクセス:49852


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2022-01-21 (金) 14:07:43 (1050d)