使用JSON.toJSONString中序列化空字符串遇到的坑

FastJson简介

fastjson是由alibaba开源的一套json处理器。
与其余json处理器(如Gson,Jackson等)和其余的Java对象序列化反序列化方式相比,有比较明显的性能优点


1.使用 JSON.toJSONString 居然也有坑

今天,在对对象转成JsonString的时候,对象有三个属性,其中两个有内容,一个为 nulljava

踩坑实例


这里箭头指向的位置,由于 sent-1 中的 value为空 ,因此并未打印出来。json

第二个使用:性能

JSON.toJSONString(map, SerializerFeature.WriteMapNullValue)

指定序列化方式就打印出来了。spa


2.将对象转换成 JsonString 在fastJson 中有两种方式

  1. 经过 JSON.toJSONString
  2. 经过 JSONObject.toJSONString


3. WriteNullStringAsEmpty 和 WriteMapNullValue 都可以将为 null 的属性显示出来 , 而不是默认被忽略掉

System.out.println(JSON.toJSONString(message, SerializerFeature.WriteNullStringAsEmpty));
    System.out.println(JSON.toJSONString(message,SerializerFeature.WriteMapNullValue));
    
    {"data":null,"msg":" lankerens.com"}
    {"data":null,"msg":" lankerens.com"}



4.对规则的理解:⭐

SerializerFeature.WriteMapNullValue

是否输出值为 null 的字段, 默认为falsecode

也就是说有null时会输出而不是忽略(默认策略是忽略,因此看不到为null的字段)对象


SerializerFeature.WriteNullStringAsEmpty

字符类型字段若是为null,输出为 ”“ , 而非nullrem

注意是字段是字段是字段 (即 属性 ),而不是 json.put("key",null),因此用它时,字段为null的能够转换为空字符串字符串


若是让输出的json中全部为null的字符串都变成空字符串,最简单的作法就是加一个值过滤器,这样就避免了有的字段为null,有的字段为空字符的现象。it


String a = null;
    System.out.println(JSON.toJSONString(a, SerializerFeature.WriteNullStringAsEmpty));
    
    {"a":""} / 而不是 {"a":null}
相关文章
相关标签/搜索