LoginSignup
42

More than 5 years have passed since last update.

gsonの使い方

Posted at

環境

Java:8
GSON:2.2.4

参考

GSONとは

  • JavaのオブジェクトとJSON形式のデータを相互で変換するためのライブラリ
  • シンプルなtoJson()とfromJson()メソッドで相互変換を実現する
  • Javaのオブジェクトがネストしている構造でも変換を行える

インストール

Gradleの場合

dependencies {
    compile 'com.google.code.gson:gson:2.2.4'
}

Mavenの場合

<dependency>
      <groupId>com.google.code.gson</groupId>
      <artifactId>gson</artifactId>
      <version>2.2.4</version>
      <scope>compile</scope>
</dependency>

変換するJavaのクラス

今回はUserInfoクラスとCompanyクラスを使用する
CompanyクラスはUserInfoクラスのオブジェクトをListの形式で保持している
※これから表示するクラスのsetter、getterは省略する

UserInfo.java
public class UserInfo {
    private String name;
    private int age;

    @Override
    public String toString() {
        return "UserInfo{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
Company.java
public class Company {
    private String name;
    private List<UserInfo> userInfos;

    @Override
    public String toString() {
        return "Company{" +
                "name='" + name + '\'' +
                ", userInfos=" + userInfos +
                '}';
    }
}

Java→JSON

JavaのオブジェクトをJSON形式に変換する方法

Gson gson = new Gson();

UserInfo userInfo = new UserInfo();
userInfo.setAge(20);
userInfo.setName("カサレアル 太郎");
List<UserInfo> list = new ArrayList<>();
list.add(userInfo);

Company company = new Company();
company.setName("カサレアル");
company.setUserInfos(list);

String json = gson.toJson(company);

生成されるjsonは以下の通り

{"name":"カサレアル","userInfos":[{"age":20,"name":"カサレアル 太郎"}]}

JSONからJava(単一オブジェクト)

次のJSONをJavaのオブジェクトに変換する

{"name":"カサレアル","userInfos":[{"age":20,"name":"カサレアル 太郎"}]}
String json ="{\"name\":\"カサレアル\",\"userInfos\":[{\"age\":20,\"name\":\"カサレアル 太郎\"}]}";
Gson gson = new Gson();

Company company = gson.fromJson(json, Company.class);

JSONからJava(コレクションオブジェクト)

以下のJSONをコレクションオブジェクトに変換する

[
  {
    "name": "はじめての会社",
    "userInfos": [
      {
        "age": 16,
        "name": "山田 花子0"
      },
      {
        "age": 17,
        "name": "山田 花子1"
      }
    ]
  },
  {
    "name": "ふたつめの会社",
    "userInfos": [
      {
        "age": 16,
        "name": "山田 花子0"
      },
      {
        "age": 17,
        "name": "山田 花子1"
      },
      {
        "age": 18,
        "name": "山田 花子2"
      }
    ]
  }
]
String json = "省略"
Gson gson = new Gson();
// 変換する型情報を用意する
Type listType = new TypeToken<List<Company>>(){}.getType();
List<Company> list = gson.fromJson(json, listType);

ここでのポイントは、変換前に変換後の型情報を生成する
変換処理の第2引数に用意した型を渡す

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
42