備忘録

備忘録

JavaでJSONを扱う(GSONの使い方)

Ⅰ. はじめに

JavaJSONを扱う方法です
最近人気のGoogleが開発しているライブラリ GSON を利用します。

C#の場合はJSON.NETを利用すれば、クラスを作らなくてもJSONをdynamicに利用したり、LINQ to Objects ができますが、GSONはクラスが必須です。
※2018/03/24追記
GSONでもクラスが不要な書き方がサポートされていました。

この記事で利用するサンプルのJSON

[
  {"id": 1, "name": "name001", "age": 20},
  {"id": 2, "name": "name002", "age": 21},
  {"id": 3, "name": "name003", "age": 22}
]

Ⅱ. 使い方(クラスを作る場合)

1. JSONJavaのクラスに変換する

手動での変換が面倒な場合は以下のようなWebサイトを利用します。
http://www.jsonschema2pojo.org/
f:id:kagasu:20170310171151p:plain

2. Main.java

String strJson = "[{\"id\": 1, \"name\": \"name001\", \"age\": 20},{\"id\": 2, \"name\": \"name002\", \"age\": 21},{\"id\": 3, \"name\": \"name003\", \"age\": 22}]";

Gson gson = new Gson();
User[] users = gson.fromJson(strJson, User[].class);

for(User user : users) {
	System.out.println(user.name);
}

3. 実行結果

name001
name002
name003

Ⅲ. 使い方(クラスを作らない場合)

1. Main.java
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;

public class Main {
    public static void main(String[] args){
        String strJson = "[{\"id\": 1, \"name\": \"name001\", \"age\": 20},{\"id\": 2, \"name\": \"name002\", \"age\": 21},{\"id\": 3, \"name\": \"name003\", \"age\": 22}]";

        JsonParser parser = new JsonParser();
        JsonArray objs = parser.parse(strJson).getAsJsonArray();

        for(JsonElement obj : objs) {
            System.out.println(obj.getAsJsonObject().get("name").getAsString());
        }
    }
}

3. 実行結果

name001
name002
name003