41
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

Organization

gsonの使い方

環境

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

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
Sign upLogin
41
Help us understand the problem. What are the problem?