GSONによるJSONとJavaの相互変換

Googleが提供するGSONは、JSONデータとJavaオブジェクトを相互に変換するためのライブラリです。JavaでJSONを扱うための他のライブラリは、使いやすさで言えばjson-libがありますが、jakarta commons-lang、jakarta commons-beanutils等のモジュールに依存します。他のライブラリを入れたくなかったので、GSONを使用します。Eclipseの参照ライブラリにgson-2.2.4.jarを登録し、「import com.google.gson.Gson」で読み込みます。

toJsonメソッドによるJavaオブジェクトからJSONデータへの変換

JavaオブジェクトからJSONデータへの変換するには、toJsonメソッドを使用します。
最初にJSONデータの変換の対象となるクラス「Post」を定義します。Postは、フィールドにUserオブジェクトとCommentオブジェクトのListを持ちます。

public class User {
    public String email;
    public String fullname;

    public User(String email, String fullname) {
    (各メンバー変数にデータを設定します)
    }
}
public class Remark {
    public String author;
    public String content;

    public Remark(String author, String content) {
    (各メンバー変数にデータを設定します)
    }

}
public class Post {
    public String title;
    public String content;
    public User author;
    public List<Remark> comments;

    public Post(User author, String title, String content) {
    (各メンバー変数にデータを設定します)
    }
}

次に、JavaオブジェクトからJSONへ変換します。次に示すコードでは、User クラスのインスタンスを作成して、Postクラスのインスタンス「newPost 」を作成し、Postオブジェクトを作成します。Remark クラスのインスタンスを作成して、インスタンス「newPost」 に追加していきます。変換するには toJson() を使います。作成したインスタンス「newPost」をパラメータとしてtoJsonを呼び出し、文字列に変換します。

    Gson gson = new Gson();

    User user1 = new User("tomo@tomo.com", "tomo"); 
    Post newPost = new Post(user1, "ike", "ikeとは");
    Remark remark = new Remark("作成者", "すばらしい");
    newPost.comments.add(remark);
    newPost.comments.add(remark);

    // JavaオブジェクトからJSONへの変換:フィールドにListを含むオブジェクト
    System.out.println("コメント付き投稿: " + gson.toJson(newPost));

実行した結果が次のようになります。変換すると、シリアライズされたString で、JSONオブジェクトが表示されるます。

コメント付き投稿: {“title”:”ike”,”content”:”ikeとは”,”author”:{“email”:”tomo@tomo.com”,”fullname”:”tomo”},”comments”:[{"author":"作成者","content":"すばらしい"},{"author":"作成者","content":"すばらしい"}]}

文字列としてJSONデータを定義する場合(参考)

定数として、JSONデータを定義する場合、次のように記述します。
//文字列をJSONデータとして定義したい場合
String json = “{\”temperature\”:5,\”Humidity\”:2,\”Pressure\”:3}”;
//浮動小数点の数値をJSONデータとして定義したい場合
String json = “{\”temperature\”:” ;
json += String.format(“%1$.5f”, temperaturedata);
json += “,\”Humidity\”:”;
json += String.format(“%1$.5f”, humidity);
json += “,\”Pressure\”:”;
json += String.format(“%1$.5f”, barometricpressure);
json += “}”;

fromJsonメソッドによるシリアライズされたJSONオブジェクトからJavaオブジェクトへの変換

シリアライズされたJSONオブジェクトからJavaオブジェクトへ変換する時は 、fromJson() を使います。シリアライズされたJSONオブジェクトから変換されて、Postクラスが作成されます。ここでは、上記のtoJson()で作成したJsonオブジェクトをfromJson()の入力として、Postクラスにインスタンス「post 」に設定します。 。

       // JSONからフィールドにListを含むJavaオブジェクトへの変換 
        String jsonStr = gson.toJson(newPost);
        Post post = gson.fromJson(jsonStr, Post.class);
        System.out.println("Post: タイトル=" + post.title 
                            + ", 著者=" + post.author.fullname 
                            + ", コメント件数=" + post.comments.size());      

実行した結果が次のようになります。

Post: タイトル=ike, 著者=tomo, コメント件数=2

その他、Gsonは、GsonGsonBuilderでsetPrettyPrinting()を呼び出して、Gsonオブジェクト生成すると、JSONを整形できます。シリアライズするJSONが整形でき、フォーマット以外にもいろいろ設定できます。