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]