--> 首先導入jar包,並添加到Build Path
--> 需要User類:有屬性、構造方法和setter、getter方法。
--> Test 測試類:
package com.dragon.java.gson; import java.util.Arrays; import java.util.List; import com.dragon.java.json.User; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; /* Gson: Google 提供的用來在 Java 對象和 JSON 數據之間進行映射的 Java 類庫。 --> 可以將一個 JSON 字符串轉成一個 Java 對象,或者反過來。 */ public class Test { public static void main(String[] args) { String json = "{\"name\": \"李四\", \"age\": 30}"; String jsons = "[{\"name\": \"李四\", \"age\": 40},{\"name\": \"張三\", \"age\": 20},{\"name\": \"王五\", \"age\": 30}]"; String jsonss = "{\"status\":\"ok\", \"data\": [{\"name\": \"李四\", \"age\": 30},{\"name\": \"張三\", \"age\": 20},{\"name\": \"王五\", \"age\": 30}] }"; gsonFirst(json); System.out.println("----------------"); gsonTypeToken(jsons); System.out.println("----------------"); gsonFinal(jsonss); System.out.println("----------------"); serializtion(); System.out.println("----------------"); } /** * 序列化 */ private static void serializtion() { // User user = new User("張三", 20); Gson gson = new Gson(); // String jsonString = gson.toJson(user); User[] users = { new User("張三", 20), new User("李四", 30), new User("王五", 40) }; // 把數組或可變參數轉換成集合。這個集合是不可變的集合,不能添加或排除元素 List<User> userList = Arrays.asList(users); // 可以將集合變為可操作的集合 // new ArrayList<>().addAll(userlist); String json = gson.toJson(users); System.out.println(json); String json2 = gson.toJson(userList); System.out.println(json2); } /** * Gson解析 * * @param jsonss */ private static void gsonFinal(String jsonss) { // 截取有用的字符串。也可以結合官方解析截取 //String newJson = jsonss.substring(jsonss.indexOf("["),jsonss.lastIndexOf("]") + 1); Gson gson = new Gson(); A a = gson.fromJson(jsonss, A.class); if (a.getStatus().equals("ok")) { System.out.println(a.getStatus()); List<User> data = a.getData(); for (User user : data) { System.out.println(user); } } } /** * TypeToken<>(){} * * @param jsons */ private static void gsonTypeToken(String jsons) { Gson gson = new Gson(); // List users = gson.fromJson(jsons, List.class); // 泛型擦除:寫的任何的泛型類,變成.class之後泛型都會丟失 TypeToken<List<User>> listType = new TypeToken<List<User>>() { }; // TypeToken<>(){} --> (protected)抽象類 --> 記住泛型的類型 --> new了TypeToken的匿名內部類 List<User> users = gson.fromJson(jsons, listType.getType()); for (User user : users) { System.out.println(user); } } /** * 解析Json字符串 * 反序列化 * * @param json */ private static void gsonFirst(String json) { // 1、創建一個Gson對象 Gson gson = new Gson(); // 2、解析字符串 // --> 必須有無參的構造函數 // --> 每個屬性必須提供setter、getter方法 User user = gson.fromJson(json, User.class); System.out.println(user); } }