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