環境
Java:8
GSON:2.2.4
参考
GSONとは
- JavaのオブジェクトとJSON形式のデータを相互で変換するためのライブラリ
- シンプルなtoJson()とfromJson()メソッドで相互変換を実現する
- Javaのオブジェクトがネストしている構造でも変換を行える
インストール
Gradleの場合
.gradle
dependencies {
compile 'com.google.code.gson:gson:2.2.4'
}
Mavenの場合
.xml
<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形式に変換する方法
.java
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は以下の通り
.json
{"name":"カサレアル","userInfos":[{"age":20,"name":"カサレアル 太郎"}]}
JSONからJava(単一オブジェクト)
次のJSONをJavaのオブジェクトに変換する
.json
{"name":"カサレアル","userInfos":[{"age":20,"name":"カサレアル 太郎"}]}
.java
String json ="{\"name\":\"カサレアル\",\"userInfos\":[{\"age\":20,\"name\":\"カサレアル 太郎\"}]}";
Gson gson = new Gson();
Company company = gson.fromJson(json, Company.class);
JSONからJava(コレクションオブジェクト)
以下のJSONをコレクションオブジェクトに変換する
.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"
}
]
}
]
.java
String json = "省略"
Gson gson = new Gson();
// 変換する型情報を用意する
Type listType = new TypeToken<List<Company>>(){}.getType();
List<Company> list = gson.fromJson(json, listType);
ここでのポイントは、変換前に変換後の型情報を生成する
変換処理の第2引数に用意した型を渡す