はじめに
GSONは、Googleが提供するJSONデータとJavaオブジェクトを相互に変換するためのライブラリです。
google-gson - A Java library to convert JSON to Java objects and vice-versa - Google Project Hosting
https://code.google.com/p/google-gson/
JavaでJSONを扱うためのライブラリは他にJackson、JSONIC等があります。
GSONのメインとなるのは Gson
クラスです。
GsonBuilder
クラスを使うとより詳細な条件を指定してJavaとJSONの変換を行うことができます。
ここではGsonクラスの使い方を紹介します。
サンプルで使用するクラス
シンプルなJavaのクラスです。
PostはフィールドにUserオブジェクトとCommentオブジェクトのListを持っています。
User.java
public class User {
public String email;
public String fullname;
public User(String email, String fullname) {
this.email = email;
this.fullname = fullname;
}
}
Post.java
public class Post {
public String title;
public String content;
public User author;
public List<Comment> comments;
public Post(User author, String title, String content) {
this.comments = new ArrayList<Comment>();
this.author = author;
this.title = title;
this.content = content;
}
}
Comment.java
public class Comment {
public String author;
public String content;
public Comment(String author, String content) {
this.author = author;
this.content = content;
}
}
シリアライズ - toJson()
JavaからJSONへ変換する時は toJson()
を使います。
デフォルトではnullのフィールドはJSONに含まれません。
ToJsonSample.java
public class ToJsonSample {
/*
* JavaオブジェクトからJSONへの変換
*/
public static void main(String[] args) {
Gson gson = new Gson();
User user1 = new User("bob@jmail.com", null); //fullnameにnullをセット
User user2 = new User("jeff@jmail.com", "Jeff");
List<User> userList = new ArrayList<>();
userList.add(user1);
userList.add(user2);
// JavaオブジェクトからJSONへの変換
System.out.println("ユーザー: " + gson.toJson(user1));
// JavaオブジェクトからJSONへの変換:List
System.out.println("ユーザーリスト: " + gson.toJson(userList));
Post newPost = new Post(userList.get(0), "postTitle", "postContent");
Comment comment = new Comment("comment_author", "comment_comment");
newPost.comments.add(comment);
newPost.comments.add(comment);
// JavaオブジェクトからJSONへの変換:フィールドにListを含むオブジェクト
System.out.println("コメント付き投稿: " + gson.toJson(newPost));
}
}
###実行結果
ユーザー: {"email":"bob@jmail.com"}
ユーザーリスト:
[
{
"email": "bob@jmail.com",
"fullname": "Bob"
},
{
"email": "jeff@jmail.com",
"fullname": "Jeff"
}
]
コメント付き投稿:
{
"title": "postTitle",
"content": "postContent",
"author": {
"email": "bob@jmail.com",
"fullname": "Bob"
},
"comments": [
{
"author": "comment_author",
"content": "comment_comment"
},
{
"author": "comment_author",
"content": "comment_comment"
}
]
}
デシリアライズ - fromJson()
JSONからJavaへ変換する時は fromJson()
を使います。
FromJsonSample.java
public class FromJsonSample {
/*
* JSONからJavaオブジェクトへの変換
*/
public static void main(String[] args) {
Gson gson = new Gson();
// JSONからStringへの変換
String str = gson.fromJson("\"hello\"", String.class);
System.out.println("String: " + str);
// JSONからJavaオブジェクトへの変換
User user = gson.fromJson("{\"email\":\"bob@jmail.com\",\"fullname\":\"Bob\"}", User.class);
System.out.println("User: " + user.email + " / " + user.fullname);
// JSONから配列への変換
int[] array = gson.fromJson("[1, 2, 3]", int[].class);
System.out.println("int[]: " + array[0] + ", " + array[1] + ", " + array[2]);
// JSONからListへの変換
List list = gson.fromJson("[\"hello\", \"hellohello\",\"hellohellohello\"]", List.class);
System.out.println("List: " + list.get(0) + ", " + list.get(1) + ", " + list.get(2));
// JSONからフィールドにListを含むJavaオブジェクトへの変換
String jsonStr = "{\"title\":\"投稿タイトル\",\"content\":\"本文本文本文\","
+ "\"author\":{\"email\":\"bob@jmail.com\",\"fullname\":\"Bob\"},"
+ "\"comments\":[{\"author\":\"Tom\",\"content\":\"コメント本文\"}]"
+ "}";
Post post = gson.fromJson(jsonStr, Post.class);
System.out.println("Post: タイトル=" + post.title
+ ", 著者=" + post.author.fullname
+ ", コメント件数=" + post.comments.size());
}
}
###実行結果
String: hello
User: bob@jmail.com / Bob
int[]: 1, 2, 3
List: hello, hellohello, hellohellohello
Post: タイトル=投稿タイトル, 著者=Bob, コメント件数=1