Help us understand the problem. What is going on with this article?

gsonの使い方

More than 1 year has 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引数に用意した型を渡す

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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした