Java
JSON

GSONの基本的な使い方

More than 5 years have passed since last update.


はじめに

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を扱うためのライブラリは他にJacksonJSONIC等があります。

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