定义
json是一种轻量级的数据交换格式,分为json数组和json对象。json数组和json对象可以互相嵌套
JSON数组特点
- 使用中括号包裹
- 元素之间使用逗号分隔
- 元素的数据类型没有限制
获取元素的方式:通过索引可以访问json数组中的元素(索引从0开始)
示例:json = [“aaa”, 1, true]
JSON对象特点
- 使用大括号包裹
- 元素必须是键值对(键必须是字符串类型,值的类型没有限制)
- 键值对之间使用逗号分隔
获取值的方式:通过 .键名获取
示例:json = {“a”:“aaa”, “b”:123, “c”:true}
常用的json解析库
FastJson:阿里巴巴开源的json解析库,支持将java bean序列化为json字符串,也可以把json字符串反序列化为java bean
序列化
把java对象转成json格式字符串的过程
反序列化
把json格式字符串转成java对象的过程
fastJson的使用
序列化API
String jsonString = JSON.toJSONString(Object obj)
返回json格式的字符串,支持list,set, map,java对象
反序列化API
json—java对象
Student stu = JSON.parseObject(json数据,对象.class)
json—list集合
List list = JSON.parseArray(json数据,集合泛型的class对象);
json—map集合
Map<String, Student> map = JSON.parseObject(json数据, new TypeReference<Map<String, Student>>(){})
创建new TypeReference需使用匿名内部类
枚举 SerializerFeature
格式: String jsonString = JSON.toJSONString(student, >SerializerFeature.WriteMapNullValue);
WriteMapNullValue 序列化类中null值的属性,基本数据类型等于默认值,包装类>等于null
WriteNullStringAsEmpty 属性值为null时序列化为“”
WriteNullNumberAsZero 属性值为null时序列化为0
WriteNullBooleanAsFalse 属性值为null时序列化为false
WriteDateUseDateFormat 格式化日期 把毫秒值转成 yyyy-MM-dd HH:mm:ss格式
PrettyFormat 格式化 横向输出的数据变为纵向
注解 JsonField
作用于方法,字段,参数上,在序列化和反序列化时进行特性功能定制
格式:@JsonField(name=“zhangsan”)
name:指定序列化后的名字
ordinal:指定序列化后的顺序
format:指定序列化后的格式
serialize:是否序列化该字段
deserialize:是否反序列化该字段
serialzeFeatures:序列化时的特性定义(与枚举的功能相同)
注解 JsonType
只可以作用在类上
格式:JSONType(includes = {"","",""})
includes:指定要被序列化的字段(优先级高于serialize)
ignores:指定不需要被序列化的字段
orders:指定序列化的顺序
serialzeFeatures:与上面的枚举一致
注意:
- FastJson默认情况下不会对空值null做序列化