参考:https://www.runoob.com/w3cnote/fastjson-intro.html
Json类库选择:Java中并没有内置JSON的解析,因此使用JSON需要借助第三方类库。下面是几个常用的 JSON 解析类库:
Gson:谷歌开发的JSON库,功能十分全面。
FastJson:阿里巴巴开发的JSON库,性能十分优秀。
Jackson:社区十分活跃且更新速度很快。
Fastjson是一个 Java 库,可以将 Java 对象转换为 JSON 格式,当然它也可以将 JSON 字符串转换为 Java 对象。Fastjson 可以操作任何 Java 对象,即使是一些预先存在的没有源码的对象。
源码地址:https://github.com/alibaba/fastjson Fastjson
中文 Wiki:https://github.com/alibaba/fastjson/wiki/Quick-Start-CN
Fastjson特性
- 提供服务器端、安卓客户端两种解析工具,性能表现较好。
- 提供了 toJSONString() 和 parseObject() 方法来将 Java 对象与 JSON 相互转换。调用toJSONString()方法即可将对象转换成 JSON 字符串,parseObject() 方法则反过来将 JSON 字符串转换成对象。
- 允许转换预先存在的无法修改的对象(只有class、无源代码)。
- Java泛型的广泛支持。
- 允许对象的自定义表示、允许自定义序列化类。
- 支持任意复杂对象(具有深厚的继承层次和广泛使用的泛型类型)。
FastJson使用:
可以在 maven 中央仓库中直接下载:http://repo1.maven.org/maven2/com/alibaba/fastjson/
或
通过Maven依赖使用:
其中 1.2.47 是版本号,根据需要使用特定版本,建议使用最新版本。
FastJson类库中最基本的类和方法定义:
JSON类在com.alibaba.fastjson.JSON包中。
JSON类提供了多种 Java对象<->JSON字符串 直接互相转换的方法。
JSON.parseObject():从字符串解析 JSON 对象。
JSON.parseArray():从字符串解析 JSON 数组。
JSON.toJSONString(obj/array):将 JSON 对象或 JSON 数组转化为字符串。
//从字符串解析JSON数组
//将JSON对象转化为字符串
//将JSON数组转化为字符串
JSON类中主要常用方法定义
JSONObject类在com.alibaba.fastjson.JSONObject包中。
JSONArray类在com.alibaba.fastjson.JSONArray包中。
样例:
使用JSON.toJSONString()将Java对象转换换为JSON字符串:
输出结果为:
我们还可以自定义输出,并控制字段的排序、日期显示格式、序列化标记等。接下来我们更新bean并添加几个字段:
以上代码中我们列出了基本参数类别,并使用 @JSONField 注解,以便实现自定义转换:
- format参数用于格式化Data的属性。
- serialize参数指定字段不序列化。默认情况下,FastJson库可以序列化Java bean实体,但可以使用serialize指定字段不序列化。
- ordinal参数指定字段的顺序。
输出结果为:
使用JSONObject和JSONArray创建JSON对象。
JSONObject和JSONArray继承了JSON,可以直接使用两者对“JSON字符串”与“JSON对象” 及java Bean之间做转换,不过为了避免混淆,我们还是建议使用JSON的toJSONString()方法。
使用继承的toJSONString()方法样例:
输出结果为:
@JSONField 的作用对象:
- Field
- Setter和Getter方法
注意:FastJson 在进行操作时,是根据Getter和Setter 的方法进行的,并不是依据 Field 进行。
注意:若属性是私有的,必须有set方法。否则无法反序列化。
JSONField定义:
@JSONField 配置方式:
- 配置在 field 上
- 配置在 getter/setter 上
- 使用format配置日期格式化
- 使用serialize/deserialize指定字段不序列化/反序列化
- 使用ordinal指定字段的顺序
默认fastjson序列化一个java bean,是根据 fieldName 的字母序进行序列化的,你可以通过 ordinal 指定字段的顺序。这个特性需1.1.42以上版本。
- 不返回null字段数据
在相关对象的类上添加 @JsonInclude 注解,设定值为 NON_NULL
则HTTP Response返回的该类的对象的JSON数据如下所示,无为null的字段
- 返回null字段数据
在相关对象的类上添加 @JsonInclude 注解,设定值为 ALWAYS
则HTTP Response返回的该类的对象的JSON数据如下所示,其中包含null的字段
@JsonInclue注解不设定值的情况下,默认使用 ALWAYS。
实例:
在上例中,首先从 JSON 格式的字符串中构造一个 JSON 对象,之后依次读取字符串、整数、布尔值以及数组。打印结果如下:
- 实例:
- 注意:反序列化时为对象时,必须要有默认无参的构造函数,否则会报异常:com.alibaba.fastjson.JSONException: default constructor not found.
(1)JSONArray的方法
在某些场景下,对Value做过滤,需要获得所属JavaBean的信息,包括类型、字段、方法等。在fastjson-1.2.9中,提供了ContextValueFilter,类似于之前版本提供的ValueFilter,只是多了BeanContext参数可用。
以上实例中我们隐藏了 DATE OF BIRTH 字段,并过滤名字不包含John的字段:
- NameFilter: 序列化时修改 Key。
- SerializeConfig:内部是个map容器主要功能是配置并记录每种Java类型对应的序列化类。
注意我们使用的是 toJSONStringWithDateFormat() 而不是 toJSONString() ,它可以更快速的格式化日期。输出结果:
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/java-jiao-cheng/11450.html