1.模块导入(这里用fastjson举例)
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.30</version>
</dependency>
2.正常解析
假如存在一个字符串jsonstr="{"id":1,"name":null,"age":null,"sex":"男"}",需要将其解析为Json对象
@Test
public void testJsonNull(){
String jsonStr="{\"id\":1,\"name\":null,\"age\":null,\"sex\":\"男\"}";
JSONObject jsonObject = JSON.parseObject(jsonStr);
System.out.println("jsonObject = " + jsonObject.toJSONString());
//输出结果为 jsonObject = {"sex":"男","id":1}
}
这样我们会发现解析出来的结果只保留了非null值对应的key,但有时候可能我们需要将值为null对应的key也保留下来,这时候就可以通过指定SerializerFeature来实现
public void testJsonNull(){
String jsonStr="{\"id\":1,\"name\":null,\"age\":null,\"sex\":\"男\"}";
JSONObject jsonObject = JSON.parseObject(jsonStr);
String jsonString = JSON.toJSONString(jsonObject, SerializerFeature.WriteMapNullValue);
System.out.println("jsonString = " + jsonString);
//输出结果为 jsonString = {"sex":"男","name":null,"id":1,"age":null}
}
这里可以看到我们通过加入SerializerFeature.WriteMapNullValue就可以实现保留值为null对应的key
3.SerializerFeature枚举类常用选项
-
WriteMapNullValue
当一个JSON对象字段的值为空时,可以显示这个字段原来的键和值
-
WriteNullStringAsEmpty
当一个JSON字符串值为空时,可以将其写成空字符串
-
WriteNullBooleanAsFalse
当一个JSON布尔值为空时,可以将其写成false
-
WriteNullNumberAsZero
当一个JSON数值字段为null时,可以将其输出为0
-
WriteNullListAsEmpty
当一个List字段为null时,可以将其输出为空数组