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が整形でき、フォーマット以外にもいろいろ設定できます。