JSON反序列化使用递归方式来解析JSON字符串,不使用任何第三方JAR包,只使用JAVA的反射来创建对象(必须要有无参构造器),赋值,编写反射缓存来提升性能。支持复杂的泛型类型,数组类型等所有类型。(不支持高版本JDK1.8以上的日期类型,如LocalDate,LocalDateTime,需要你修改源码JsonString类来支持)
- package test;
- import java.lang.reflect.Type;
- import java.util.Arrays;
- import java.util.List;
- import java.util.Map;
- import june.zero.generic.TypeBuilder;
- import june.zero.json.JSON;
- public class Main {
- public static class User {
- public String name;
- public int age;
- public java.util.Date date;
- public int[] hobbys;
- public String jsonObjectData;
- public String jsonArrayData;
- }
-
- public static class Response<T> {
- public int code;
- public String message;
- public T data;
- }
-
- public static void main(String[] args) {
- // //支持单引号和没有空格名称
- // //String json = "{\"name\":\"张三\",\"age\":33}";//标准JSON格式
- // //String json = "{'name':'张三','age':33}";//单引号的格式
- // //String json = "{name:张三,age:33}";//没有空格名称的格式,不建议使用
- String json = "{'name':'张三','age':33,'date':'2024-06-06 12:12:12','hobbys':[1,2,3],'jsonObjectData':{'a':1,'b':2},'jsonArrayData':['a','b','c']}";
- User user = JSON.fromJSON(json, User.class);
- System.out.println(user.name);//张三
- System.out.println(user.age);//33
- System.out.println(user.date);//2024-06-06 12:12:12.0
- System.out.println(Arrays.toString(user.hobbys));//[1, 2, 3]
- //json对象以String存储起来
- System.out.println(user.jsonObjectData);//{'a':1,'b':2}
- //json数组以String存储起来
- System.out.println(user.jsonArrayData);//['a','b','c']
-
- String json2 = "{'code':1,'message':'查询成功','data':[{'name':'李四','age':44},{'name':'王五','age':55}]}";
- System.out.println("=====1======");
- Type listUserType = new TypeBuilder<Response<List<User>>>() {}.getGenericType();
- System.out.println(listUserType);//test.Main.test.Main$Response<java.util.List<test.Main$User>>
- Response<List<User>> response1 = JSON.fromJSON(json2, listUserType);
- System.out.println(response1.data.get(1).name);//王五
-
- System.out.println("=====2======");
- Type listMapType = new TypeBuilder<Response<List<Map<String,Object>>>>() {}.getGenericType();
- System.out.println(listMapType);//test.Main.test.Main$Response<java.util.List<java.util.Map<java.lang.String, java.lang.Object>>>
- Response<List<Map<String,Object>>> response2 = JSON.fromJSON(json2, listMapType);
- System.out.println(response2.data.get(1).get("name"));//王五
-
- System.out.println("=====3======");
- Type stringType = new TypeBuilder<Response<String>>() {}.getGenericType();
- System.out.println(stringType);//test.Main.test.Main$Response<java.lang.String>
- Response<String> response3 = JSON.fromJSON(json2, stringType);
- System.out.println(response3.data);//[{'name':'李四','age':44},{'name':'王五','age':55}]
- }
-
- }
源码:https://files.cnblogs.com/files/blogs/824473/Zjson-source.zip?t=1718154818&download=true
jar包:https://files.cnblogs.com/files/blogs/824473/ZJson.zip?t=1718154823&download=true