Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

gsonの使い方

More than 3 years have passed since last update.

環境

Java:8
GSON:2.2.4

参考

https://github.com/google/gson

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引数に用意した型を渡す

naoi
casareal
システム開発/評価・検証支援/品質改善支援サービスと現場に即した実践的なIT研修サービスを提供しています。
https://www.casareal.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away