分享一个由本人编写的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

简单易懂的JSON框架的更多相关文章

  1. 开源 , KoobooJson一款高性能且轻量的JSON框架

    KoobooJson - 更小更快的C# JSON序列化工具(基于表达式树构建) 在C#领域,有很多成熟的开源JSON框架,其中最著名且使用最多的是 Newtonsoft.Json ,然而因为版本迭代 ...

  2. 高性能JSON框架之FastJson的简单使用

    1.前言 1.1.FastJson的介绍: JSON协议使用方便,越来越流行,JSON的处理器有很多,这里我介绍一下FastJson,FastJson是阿里的开源框架,被不少企业使用,是一个极其优秀的 ...

  3. Snack3 一个新的微型JSON框架

    Snack3 一个新的微型JSON框架 一个作品,一般表达作者的一个想法.因为大家想法不同,所有作品会有区别.就做技术而言,因为有很多有区别的框架,所以大家可以选择的框架很丰富. snack3.基于j ...

  4. URL及日期等特殊数据格式处理-JSON框架Jackson精解第2篇

    Jackson是Spring Boot默认的JSON数据处理框架,但是其并不依赖于任何的Spring 库.有的小伙伴以为Jackson只能在Spring框架内使用,其实不是的,没有这种限制.它提供了很 ...

  5. 属性序列化自定义与字母表排序-JSON框架Jackson精解第3篇

    Jackson是Spring Boot默认的JSON数据处理框架,但是其并不依赖于任何的Spring 库.有的小伙伴以为Jackson只能在Spring框架内使用,其实不是的,没有这种限制.它提供了很 ...

  6. @JsonCreator自定义反序列化函数-JSON框架Jackson精解第5篇

    Jackson是Spring Boot(SpringBoot)默认的JSON数据处理框架,但是其并不依赖于任何的Spring 库.有的小伙伴以为Jackson只能在Spring框架内使用,其实不是的, ...

  7. SpringBoot(2) Json框架 -- Jackson返回结果处理

    一.常用框架 阿里 fastjson,谷歌gson等 JavaBean序列化为Json,性能:Jackson > FastJson > Gson > Json-lib 同个结构 Ja ...

  8. 小兔JS教程(五) 简单易懂的JSON入门

    上一节的参考答案: http://xiaotublog.com/demo.html?path=homework/04/index2 本节重点来介绍一下JSON,JSON(JavaScript Obje ...

  9. 简单易懂的单元测试框架-gtest(一)

    简介     gtest是google开源的一个单元测试框架,以其简单易学的特点被广泛使用.该框架以第三方库的方式插入被测代码中.同其他单元测试框架相似,gtest也通过制作测试样例来进行代码测试.同 ...

  10. 超轻量级Json框架SmartObject

    最近我在codeplex上发了一个项目SmartObject(基于framework4.5,目前是1.0版本).用法如下: // HowToUse using Spider.Data; //json ...

随机推荐

  1. Apsara Stack 技术百科 | 联结良性生态,筑千行百业的数字基石

    ​简介:作为现今IT领域最重要的课题:基础设施云化,离不开与伙伴的携手合作,如何让云上解决方案能充分释放价值的同时形成一个相互依存的自循环生态系统,混合云君来跟你聊聊! ​ 生态系统这个词在维基百科上 ...

  2. 解密万亿参数M6模型预训练背后的分布式框架Whale

    ​简介: 最近,阿里云PAI团队和达摩院智能计算实验室一起发布"低碳版"巨模型M6,大幅降低万亿参数超大模型训练能耗.借助我们自研的Whale框架仅使用480卡GPU,即训练出了规 ...

  3. embedding models 是什么

    embedding models 是一类机器学习模型,它们的核心功能是将高维.离散的输入数据(如词汇.类别标签.节点或实体)映射到低维.连续的向量空间中. 这些向量(即 embeddings)通常具有 ...

  4. [FAQ] 英文字母输入时变成了胖体

    如下,在输入法上右键,切换为 "半角" 即可. Link:https://www.cnblogs.com/farwish/p/17513598.html

  5. dotnet C# 只创建对象不调用构造函数方法

    有时我期望只是创建出对象,但是不要调用对象的构造方法,可以通过使用 FormatterServices 的 GetUninitializedObject 函数来实现只创建对象不调用构造函数方法 这个 ...

  6. 2019-10-14-云之幻-UWP-视频教程

    title author date CreateTime categories 云之幻 UWP 视频教程 lindexi 2019-10-14 21:8:26 +0800 2019-10-14 21: ...

  7. 聊聊流言协议(Gossip)

    什么是流言协议? 在分布式系统中,以下两个是典型的问题: 维护系统状态(节点的活跃性) 节点间的通信 解决这些问题的解决方案之一如下: 集中式状态管理服务 对等状态管理服务 集中式状态管理服务 像 A ...

  8. HTTPS 是如何进行安全传输的 ?

    概述 现代密码学对信息的处理主要离不开以下的三种形式: 摘要:主要用于数据校验,例如存储密码等,摘要是对信息进行单向的哈希,改变信息的原有形态,因为哈希函数的特点是易变性(即使微小的变化也会产生完全不 ...

  9. 02 Xpath Helper介绍

    目录 参考文档 下载地址 安装 使用 参考文档 xpath helper https://www.cnblogs.com/ChevisZhang/p/12869582.html http://c.bi ...

  10. linux sftp连接报错:JSchException: Algorithm negotiation fail解决方案

    问题描述 我们用jsch包进行ssh登录的时候会报这个错误: com.jcraft.jsch.JSchException: Algorithm negotiation fail at com.jcra ...