Java-->Gson序列化及反序列化
--> 首先导入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); } }