fastjson
转自:https://github.com/ZhongFuCheng3y/athena
1|0一、fastjson入门
以下内容来源:https://github.com/alibaba/fastjson/wiki/Quick-Start-CN
它可以解析JSON
格式的字符串,支持将Java Bean
序列化为JSON
字符串,也可以从JSON
字符串反序列化到JavaBean
fastjson
优点:速度快、使用广泛、使用简单、功能完备、测试完备(之前爆了很多漏洞,现在我司走发布流程都强制我们升级fastjson
版本了),现在使用fastjson
至少升级到1.2.60
版本
速度快的原因:
1、自行编写类似StringBuilder的工具类SerializeWriter。
2、使用ThreadLocal来缓存buf。
3、使用asm避免反射
4、集成jdk实现的一些优化算法
2|0二、使用fastjson
首先我们在pom
文件中引入fastjson
的依赖就好了:
fastjson
的使用主要是三个对象:
- JSON
- JSONObject
- JSONArray
2|12.1 JSON对象
JSON这个类主要用于转换:
- 将Java对象序列化为JSON字符串
- 将JSON字符串反序列化为Java对象
所以,有三个方法我们用得特别多:
parseObject(String text, Class<T> clazz)
parseArray(String text, Class<T> clazz)
toJSONString(Object object)
2|22.2 JSONObject
JSON对象( JSONObject )中的数据都是以 key-value
形式出现,所以它实现了 Map
接口:
使用起来也很简单,跟使用 Map
就没多大的区别(因为它底层实际上就是操作 Map
),常用的方法:
getString(String key)
remove(Object key)
put(String key, Object value)
clear()
getJSONObject(String key)
getJSONArray(String key)
2|32.3 JSONArray
JSONArray则是JSON数组,JSON数组对象中存储的是一个个JSON对象,所以类中的方法主要用于直接操作JSON对象
最常用的方法:
getJSONObject(int index)
3|0三、序列化和反序列化
从上面的简单介绍我们已经可以知道了:
- JSON用于将字符串反序列化为JavaBean和JavaBean序列化为JSON
- JSONObject代表的是JSON对象,底层通过Map来操作,常用
getString
等方法来获取对应的值 - JSONArray代表的是JSON对象数组,底层实际上是List,它用作于操作JSON对象
常用api
3|1反序列化
一般来说,我们从数据库拿到JSON数据以后,然后要对JSON进行修改。比如JSON串如下:
我们是不会直接操作
JSON的,我们会将JSON转成我们自己的JavaBean,再操作JavaBean,最后序列化为JSONString
从上面的JSON
结构上来看还是相对复杂的,思路:
- 我们可以根据
JSON
的结构构建对应的JavaBean - 使用
JSON
类将JSON字符串反序列化为JavaBean - 修改JavaBean的值
- 最后将
JavaBean
序列化为JSON字符串
从上面的JSON
结构,首先我们针对text
这层抽象为一个JavaBean。(实际上最里层的结构是value
,但我这边不需要处理value
,所以就不抽象了)
然后对外层进行抽象:
我们反序列化看一下:
我们要改text里边的值,只需要操作JavaBean
就好了:
序列化结果:
轻松将JSON字符串里边的字段改掉。
parse、parseObejct、parseArray区别
JSON.parseArray() 和 JSON.parseObject 都是讲 json 字符串转为实体类的方法
- JSON.parseArray 用于 json 是 [] 包裹的
- JSON.parseObject 用于 json 是 {} 包裹的
- 用JSON.toJSONString() 来解析对象
JSON.parse() 与 JSON.parseObject() 的区别
两者转化的结果都是一个json对象,没有区别。但是JSON.parseObject生成的对象有许多可以操作的方法,所以后端一般都是JSON.parseObject来解析json字符串
3|2序列化
实体类:
测试
序列化特征数组
方法
4|0四、注解
4|1JSONField配置方式
FieldInfo可以配置在getter/setter方法或者字段上。例如:
配置在getter/setter上
配置在field上
4|2使用name指定字段名称
当前端传过来的字段名不一样的时候,我们可以在字段名上加上这个注解
使用format配置日期格式化
使用serialize/deserialize指定字段不序列化
使用ordinal指定字段的顺序
缺省fastjson序列化一个java bean,是根据fieldName的字母序进行序列化的,你可以通过ordinal指定字段的顺序。这个特性需要1.1.42以上版本。
使用serializeUsing制定属性的序列化类
在fastjson 1.2.16版本之后,JSONField支持新的定制化配置serializeUsing,可以单独对某一个类的某个属性定制序列化,比如:
演示
4|3JSONType
__EOF__

本文链接:https://www.cnblogs.com/dongye95/p/16152071.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?