从零手动实现 java json 序列化框架
发表于:2025-01-22 作者:千家信息网编辑
千家信息网最后更新 2025年01月22日,jsonjson 是 java 实现的序列化 json 框架。特性8 大基本类型支持基本类型/对象数组/集合/枚举/对象 支持极简的 API后续特性@Field 注解的支持反序列化对象的完整性支持,目
千家信息网最后更新 2025年01月22日从零手动实现 java json 序列化框架
json
json 是 java 实现的序列化 json 框架。
特性
8 大基本类型支持
基本类型/对象数组/集合/枚举/对象 支持
- 极简的 API
后续特性
@Field
注解的支持- 反序列化对象的完整性支持,目前只支持基础的反序列化。
为何创作
- 解决 fastJson 中的不足
FastJSON 在序列化本身存在一定限制。当对象中有集合,集合中还是对象时,结果不尽如人意。
- 轻量且高效
FastJson 等 json 工具特性丰富,但是考虑过多,也兼容过多。
希望通过严格控制序列化和反序列,从而使得代码变得高效轻量,更加适合自己的使用场景,
- 后续拓展
后续序列化相关,将使用这个工具实现,方便自行拓展学习。
变更日志
变更日志
快速开始
环境依赖
JDK 1.7+
Maven 3.X
maven 依赖
com.github.houbb json 最新版本
基本例子
import JsonBs;import org.junit.Assert;import org.junit.Test;/** * null 测试 * @author binbin.hou * @since 0.0.1 */public class NullTest { @Test public void nullTest() { final String string = null; Assert.assertEquals("null", JsonBs.serialize(string)); final String result = JsonBs.deserialize("null", String.class); Assert.assertNull(result); }}
测试案例
以下演示所有测试代码见
test 模块
字符串和 char 测试案例
字符串
@Testpublic void commonTest() { final String string = "123"; Assert.assertEquals("\"123\"", JsonBs.serialize(string)); final String json = "\"123\""; Assert.assertEquals(string, JsonBs.deserialize(json, String.class));}@Testpublic void escapeTest() { final String string = "\"123"; Assert.assertEquals("\"\"123\"", JsonBs.serialize(string)); final String json = "\"123\""; Assert.assertEquals("123", JsonBs.deserialize(json, String.class));}
char 类型
@Testpublic void escapeTest() { char c = '\''; final String json = "\"'\""; Assert.assertEquals(json, JsonBs.serialize(c)); assert c == JsonBs.deserialize(json, char.class);}
对于数组的支持
字符串
@Testpublic void stringEmptyTest() { String[] strings = new String[]{}; String json = "[]"; Assert.assertEquals(json, JsonBs.serialize(strings)); Assert.assertEquals(strings, JsonBs.deserialize(json, String[].class));}@Testpublic void stringTest() { String[] strings = new String[]{"a", "b", "c"}; final String json = "[\"a\",\"b\",\"c\"]"; Assert.assertEquals(json, JsonBs.serialize(strings)); Assert.assertEquals(strings, JsonBs.deserialize(json, String[].class));}
基本类型测试
public void intTest() { int[] ints = new int[]{1,2,3}; final String intJson = "[1,2,3]"; Assert.assertEquals(intJson, JsonBs.serialize(ints)); //[1, 2, 3] System.out.println(Arrays.toString(JsonBs.deserialize(intJson, int[].class)));}
基本对象类型测试
public void integerTest() { Integer[] ints = new Integer[]{1,2,3}; final String json = "[1,2,3]"; Assert.assertEquals(json, JsonBs.serialize(ints)); //[1, 2, 3] System.out.println(Arrays.toString(JsonBs.deserialize(json, Integer[].class)));}
集合
字符串列表测试
public void stringTest() { List strings = new ArrayList<>(); strings.add("10"); strings.add("20"); strings.add("30"); Class clazz = strings.getClass(); final String json = "[\"10\",\"20\",\"30\"]"; Assert.assertEquals(json, JsonBs.serialize(strings)); Assert.assertEquals(strings, JsonBs.deserialize(json, clazz));}
字符串 Map 测试
public void stringTest() { Map map = new HashMap<>(); map.put("123", "456"); final String json = "{\"123\":\"456\"}"; Assert.assertEquals(json, JsonBs.serialize(map)); Assert.assertEquals(map, JsonBs.deserialize(json, map.getClass()));}
对象
基础对象演示
- User.java
public class User { private String name; private int age; private double score; private char sex; private Date birthday; //Getter & Setter //ToString()}
- 测试代码
public void userTest() { User user = new User(); user.age(10).name("wiki").birthday(new Date(1568196960491L)).score(123.d).sex('g'); final String json = "{\"name\":\"wiki\",\"age\":10,\"score\":123.0,\"sex\":\"g\",\"birthday\":1568196960491}"; Assert.assertEquals(json, JsonBs.serialize(user)); User user2 = JsonBs.deserialize(json, User.class); Assert.assertEquals(user.toString(), user2.toString());}
拓展阅读
00-什么是 json
01-模块介绍
测试
对象
序列
支持
字符
字符串
类型
代码
特性
基础
工具
数组
日志
案例
模块
轻量
过多
演示
框架
尽如人意
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
巨杉数据库合理吗
gp数据库查看是否是分区表
平谷区品牌软件开发质量服务
河北金拓互联网科技有限公司
幽默图片数据库
js数据库怎么插入
主播行业数据库小葫芦
安全的网站服务器地址
顺实数据库
希腊文翻译软件开发
格家网络技术有限公司李潇
属于数据库技术应用的是
有海外服务器的手游
海康服务器显示解码失败
cc 开发用什么软件开发
服务器作品欣赏
数据库创建主文件
阿里巴巴最新研发的数据库
rds数据库费用大概多少
网络安全书记
什么是服务器管理账号
峰峰矿区 软件开发企业
gp数据库查看是否是分区表
网络安全法所指网络安全
联合国贸发会议组织数据库
郑州aaa软件开发学院
数据库安装后计算机不能更名
hp服务器安装硬盘
查询数据库建设方案
lora网关怎么连接服务器