FastJson
FastJson
曦暮流年介绍
FastJson是阿里巴巴开源的json
解析库,它可以解析json
格式的字符串
具有特点
- 速度快
- 使用广泛
- 测试完备
- 使用简单
- 功能完备
Maven FatsJson
如果是使用的Maven
做的项目那么只需要在里面的pom.xml
文件里面添加如下代码
1 | <dependency> |
在刷新一下Maven
即可
如果添加代码
dependency
爆红的话只需要在外面加上一层dependencies
标签
1
2
3
4
5
6
7
8
9 <dependencies>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.83</version>
</dependency>
</dependencies>
序列化 —— java对象转json
[数组] {对象}
1 | String s = JSON.toJSONString(对象); |
传入对象会以字符串形式返回一个json
格式的对象
把java对象转换成json
格式的对象
1 | { |
1 | List <泛型> s = new ArrayList<泛型>(); // list集合 |
定义一个集合,并传入对象,会以字符串形式返回json
格式的数组
数组中包含对象
1 | [ |
1 | Map<键,值> map = new HashMap<键,值>(); // map集合 |
把map里面的键值对序列化成json
的字符串
1 | { |
反序列化 —— json转Java对象
转对象
1 | String s = "{"键":值,"键":值,"键":值}"; |
转集合
1 | String s = [{"键":值,"键":值},{"键":值,"键":值,"键":值}]; |
转Map
1 | String s = {"键1":{"键":值,"键":值},"键2":{"键":值,"键":值,"键":值}}; |
枚举
SeriaLizerFeature
枚举:进行序列化时,可以自定义特殊需求
json
静态方法 toJSONString()
方法参数1:第一个是要序列化的对象
方法参数2:第二个SeriaLizerFeature
枚举类型的可变参数
1 | // WriteMapNullValue 枚举中的常量,序列化null值的字段,值序列化为null |
举例:在对象中如果不给对象赋值的话那么进行toJSONString
时不会序列化值为空的对象,但是添加枚举之后没有复制的对象也会显示值为null
1 | // WriteNullStringEmpty 枚举常量,序列化为null的字段,值序列化为"" |
举例:在对象中如果不给对象赋值的话那么进行toJSONString
时不会序列化值为空的对象,但是添加枚举之后没有赋值的对象也会显示值为""
1 | // WriteNullNumberAsZero 枚举常量,序列化字段值为null的字段,值序列化为0 |
举例:在对象中如果不给对象赋值的话那么进行toJSONString
时不会序列化值为空的对象,但是添加枚举之后没有赋值的对象也会显示值为0
1 | // WriteNullBooleanFalse 枚举常量,序列化字段值为null的字段,值序列化为false |
举例:在对象中如果不给对象赋值的话那么进行toJSONString
时不会序列化值为空的对象,但是添加枚举之后没有赋值的对象也会显示值为false
1 | // WriteDateUseDateFormat 枚举常量,日期的格式化(前提是得有日期) |
举例:在对象中进行toJSONString
时时间是以一堆数字显示,加入这个之后会以日期的方式显示
它可以传入多个枚举常量中间以
,
分开即可
1 | // PrettyFormat 枚举常量,数据格式化 |
举例:在对象中进行toJSONString
时数据的格式是以横向显示的
如:
1 | {"键1":{"键":值,"键":值},"键2":{"键":值,"键":值}} |
但是经过格式化之后会以这种方式存在
1 | { |
注解
进行序列化时进行特性定制
注解一定要作用在要序列化的对象上面
JSONField
JSonField:该注解作用于方法上、字段上、参数上,可在序列化和反序列化时进行特性功能定制
- name:序列化后的名字(= “名字”)
- ordinal:序列化后的顺序(= 1 | 2 | 3)
- format:序列化后的格式(= “YYYY - MM - dd”)
- serialize:是否序列化该字段(= true | false)
- deserialize:是否反序列化该字段(= true | false)
- serialzeFeatures:序列化时的特性定义(跟枚举差不多)
1 | public class Student { |
上面注解的意思就是在序列化的时候把原本的name
名字改成sName
可以有多个注解中间用
,
分开
JSONType
JSONType:该注解作用于类上,对该类的字段进行序列化和反序列化时的特性功能定制
- includes:要被序列化的字段(= {“名1” , “名2” , “名3”})
- orders:序列化后的顺序(= {“名1” , “名2” , “名3”})
- serialzeFeatures:序列化时的特性定义(跟枚举差不多)
1 | // 属性:includes 要被序列化的字段 |
上面的直接的意思是指定要被序列化的对象的属性,比如上面 id、name、age 都写上了,所以都序列化,但是要是不写 id 那么 id 就不会被序列化
上面的JSONField
中有一个注解叫 是否序列化该字段 如果给 id 上该注解那么上面没有在JSONType
中写 id 的话即使给他上了注解也没用
1 |
|