从零手动实现 java json 序列化框架
发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,jsonjson 是 java 实现的序列化 json 框架。特性8 大基本类型支持基本类型/对象数组/集合/枚举/对象 支持极简的 API后续特性@Field 注解的支持反序列化对象的完整性支持,目
千家信息网最后更新 2025年12月01日从零手动实现 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安全错误
数据库的锁怎样保障安全
华为云服务器活动
sql数据库能直接复制
网络技术与情感
美国网络安全 签证好过吗
石家庄先锋互联网科技有限公司
企朋网络技术有限公司怎么样
如果查找不同时间的数据库
小米数据库技术支持
数据库锁库英文
莱西游戏软件开发企业
网络安全协调联动会
数据库租车系统报告项目总结
临沂市智森互联网科技有限公司
安徽数据库防护箱性价比
电器硬件软件开发公司
衡水软件开发规范
山东曦阳网络技术
代理服务器软件 ios
u8报表系统对应的数据库
怎么用服务器搭建热点
亿家安互联网科技刘捷
职高计算机网络技术第四版
青少年网络安全小结
国家图书馆的数字古籍数据库
扩展人们信息网络技术的功能
鹊启网络技术
河南工业软件开发有用吗
twitter代理服务器
服务器管理器用什么软件查看
丰台区互联网网络技术咨询哪家好