fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。
https://github.com/alibaba/fastjson
依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>x.x.x</version>
</dependency>
序列化:JSON.toJSONString() 将 Java 对象转换换为 JSON 对象
String text = JSON.toJSONString(obj); //序列化
反序列化:JSON.parseObject() 将 JSON 字符串转换为 Java 对象
VO vo = JSON.parseObject("{...}", VO.class); //反序列化
JAVABean中的注解:@JSONField,JSONField 可以配置在成员变量和getter和setter上面
- format 参数用于格式化 date 属性。
- 默认情况下, FastJson 库可以序列化 Java bean 实体, 但我们可以使用 serialize 指定字段不序列化。
- 使用 ordinal 参数指定字段的顺序
- name序列化后的key值
日期:
@JSONField(name="DATE OF BIRTH", format="dd/MM/yyyy", ordinal = 3)
注解详情:
public @interface JSONField {
// 配置序列化和反序列化的顺序,1.1.42版本之后才支持
int ordinal() default 0;
// 指定字段的名称
String name() default "";
// 指定字段的格式,对日期格式有用
String format() default "";
// 是否序列化
boolean serialize() default true;
// 是否反序列化
boolean deserialize() default true;
}
BeanToArray 序列化
String jsonOutput= JSON.toJSONString(listOfPersons, SerializerFeature.BeanToArray);
创建JSON对象
创建 JSON 对象非常简单,只需使用 JSONObject(fastJson提供的json对象) 和 JSONArray(fastJson提供json数组对象) 对象即可。
我们可以把JSONObject 当成一个 Map<String,Object> 来看,只是 JSONObject 提供了更为丰富便捷的方法,方便我们对于对象属性的操作。
同样我们可以把 JSONArray 当做一个 List<Object>,可以把 JSONArray 看成 JSONObject 对象的一个集合。
JSONArray也可以用toJSONString()方法转换成列表
FastJsonConfig自定义配置
直接上代码分析
@Bean
private FastJsonHttpMessageConverter fastJsonHttpMessageConverter() {
//创建消息转换器
FastJsonHttpMessageConverter httpMessageConverter = new FastJsonHttpMessageConverter();
//创建配置类,因为FastJsonHttpMessageConverter是返回类型,所以这个配置后面要设置到httpMessageConverter 中
FastJsonConfig fastJsonConfig = new FastJsonConfig();
//设置序列化特征,SerializerFeature是一个枚举,里面的参数是一些规则,直接使用就行
fastJsonConfig.setSerializerFeatures(SerializerFeature.QuoteFieldNames,
SerializerFeature.WriteEnumUsingToString,
SerializerFeature.WriteMapNullValue,
SerializerFeature.WriteDateUseDateFormat);
//设置过滤器
fastJsonConfig.setSerializeFilters(new ValueFilter() {
@Override
public Object process(Object o, String s, Object source) {
//如果是null就返回空字符串,这里是做的自定义返回值
if (source == null) {
return "";
}
//如果是时间类型,就返回时间戳
if (source instanceof Date) {
return ((Date) source).getTime();
}
return source;
}
});
//把配置设置到转换器中
httpMessageConverter.setFastJsonConfig(fastJsonConfig);
return httpMessageConverter;
}
也可以直接相关参数,具体可以设置哪些,可以看源代码。比如:
fastJsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
Comments | NOTHING