JavaオブジェクトをJSONに/から変換する方法(Gson)
このチュートリアルでは、https://github.com/google/gson[Gson]を使用してJavaオブジェクトをJSONに/JSONから変換する方法を説明します。
P.Sすべての例は、Gson 2.6.2
1.クイックリファレンス
1.1
toJson()
– JavaオブジェクトをJSONに変換する
Gson gson = new Gson();
Staff obj = new Staff();
//1. Java object to JSON, and save into a file
gson.toJson(obj, new FileWriter("D:\\file.json"));
//2. Java object to JSON, and assign to a String
String jsonInString = gson.toJson(obj);
1.2
fromJson()
– JSONをJavaオブジェクトに変換する
Gson gson = new Gson();
//1. JSON to Java object, read it from a file.
Staff staff = gson.fromJson(new FileReader("D:\\file.json"), Staff.class);
//2. JSON to Java object, read it from a Json String.
String jsonInString = "{'name' : 'mkyong'}";
Staff staff = gson.fromJson(jsonInString, Staff.class);
//JSON to JsonElement, convert to String later.
JsonElement json = gson.fromJson(new FileReader("D:\\file.json"), JsonElement.class);
String result = gson.toJson(json);
2. Gsonの依存関係
Gsonを使用するには、次の依存関係を宣言します。
pom.xml
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.6.2</version>
</dependency>
3. POJO
後でテストするための簡単なPOJO。
staff.java
package com.mkyong.json;
import java.math.BigDecimal;
import java.util.List;
public class Staff {
private String name;
private int age;
private String position;
private BigDecimal salary;
private List<String> skills;
//...
4. JavaオブジェクトからJSONへ
Gsonの例では、 `Staff`オブジェクトをJSON形式の文字列に変換します。
GsonExample.java
package com.mkyong.json;
import com.google.gson.Gson;
import java.io.FileWriter;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
public class GsonExample {
public static void main(String[]args) {
Staff staff = createDummyObject();
//1. Convert object to JSON string
Gson gson = new Gson();
String json = gson.toJson(staff);
System.out.println(json);
//2. Convert object to JSON string and save into a file directly
try (FileWriter writer = new FileWriter("D:\\staff.json")) {
gson.toJson(staff, writer);
} catch (IOException e) {
e.printStackTrace();
}
}
private static Staff createDummyObject() {
Staff staff = new Staff();
staff.setName("mkyong");
staff.setAge(35);
staff.setPosition("Founder");
staff.setSalary(new BigDecimal("10000"));
List<String> skills = new ArrayList<>();
skills.add("java");
skills.add("python");
skills.add("shell");
staff.setSkills(skills);
return staff;
}
}
出力
{"name":"mkyong","age":35,"position":"Founder","salary":10000,"skills":["java","python","shell"]}
//new file is created in D:\\staff.json"
JSONからJavaオブジェクトへ
Gsonの例では、ファイルからJSONを読み取り、それをJavaオブジェクトに戻します。
Gson2Example.java
package com.mkyong.json;
import com.google.gson.Gson;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
public class Gson2Example {
public static void main(String[]args) {
Gson gson = new Gson();
try (Reader reader = new FileReader("D:\\staff.json")) {
//Convert JSON to Java Object
Staff staff = gson.fromJson(reader, Staff.class);
System.out.println(staff);
//Convert JSON to JsonElement, and later to String
/** JsonElement json = gson.fromJson(reader, JsonElement.class);
String jsonInString = gson.toJson(json);
System.out.println(jsonInString);** /
} catch (IOException e) {
e.printStackTrace();
}
}
}
出力
Staff{name='mkyong', age=35, position='Founder', salary=10000, skills=[java, python, shell]}
6.よくある質問
いくつかは一般的に質問します。
6.1「TypeToken」を使用してJSON配列を `List`に変換する
String json = "[{\"name\":\"mkyong\"}, {\"name\":\"laplap\"}]";
List<Staff> list = gson.fromJson(json, new TypeToken<List<Staff>>(){}.getType());
list.forEach(x -> System.out.println(x));
6.2 JSONを `Map`に変換する
String json = "{\"name\":\"mkyong\", \"age\":33}";
Map<String, Object> map = gson.fromJson(json, new TypeToken<Map<String, Object>>(){}.getType());
map.forEach((x,y)-> System.out.println("key : " + x + " , value : " + y));
6.3リンク://java/how-to-enable-pretty-print-json-output-gson/[GsonのJSON印刷機能を有効にする]
参考文献
リンク://タグ/gson/[gson]リンク://タグ/java-json-tutorial/[java json
チュートリアル]リンク://tag/json/[json]