简单易懂的JSON框架

  分享一个由本人编写的JSON框架。

  JSON反序列化使用递归方式来解析JSON字符串,不使用任何第三方JAR包,只使用JAVA的反射来创建对象(必须要有无参构造器),赋值,编写反射缓存来提升性能。支持复杂的泛型类型,数组类型等所有类型。(不支持高版本JDK1.8以上的日期类型,如LocalDate,LocalDateTime,需要你修改源码JsonString类来支持)

  你可以改造源码,让其支持注解序列化和反序列化。扩展一些功能,如JsonPath路径方式解析。当然前提是你感兴趣和有一定的封装能力的话。。。

  下面是使用案例:

复制代码
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}]
    }
    
}

开源不易,需要鼓励。使用请标明该来源。

因为可能长时间不会更新JAR包,所以我不建议你使用到真实开发环境。代码易懂,你可以自己维护和扩展功能。测试环境使用的是JDK1.7.0_80

源码: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

相关推荐
.痞老板.35 分钟前
java ee--多线程(进阶)
java·java-ee
深入云栈2 小时前
Netty 4.2.x 源码深度解析 (二十三):ByteBuf 核心设计 —— 索引、类型与零拷贝
java·后端·架构
wang_shu_mo_ran3 小时前
MyBatis 从入门到进阶(一)
java·spring·mybatis
量化分析码农5 小时前
股票历史数据的复权参数对照:多级别返回的字段与数值差异
java·javascript·后端
猫猫不是喵喵.5 小时前
从0到1创建一个微服务项目
java·数据库·微服务·1024程序员节
瑞雪兆丰年兮5 小时前
JavaWeb-day13-SpringBootWeb事务管理&AOP
java·开发语言·springboot·javaweb·事务·web·aop
曲径海盗5 小时前
Try-Except怎么用,3个追问解答在自动化下的应用
java·jvm·oracle
Cosolar6 小时前
极简智库:快速搭建你的开源项目教程阅读平台,让 docs/ 目录被更多人看见
java·架构·github
nice_lcj5206 小时前
【从零理解 Spring AI · 16】Agent 与工作流:什么该写死,什么该让模型决定
java·人工智能·后端·spring ai·ai应用开发
北京云帆互联科技7 小时前
云帆培训考试系统更新说明:v9.3.0
java·学习