FastJson:json转换工具

发布于 2021-11-22  2150 次阅读


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");

欢迎欢迎~热烈欢迎~