JSONObject中的null值问题
1、问题
使用Fastjson的JSONObject对象putnull
值并转字符串后发现结果中并没有值为null
的那一项:
JSONObject data = new JSONObject();
data.put("foo", "Hello World!");
data.put("bar", null);
String str = data.toJSONString();
System.out.println(str);
输出:
{"foo":"Hello World!"}
2、处理方法
可以使用设置了SerializerFeature.WriteMapNullValue
的JSONObject.toJSONString
方法来获得想要的结果:
JSONObject data = new JSONObject();
data.put("foo", "Hello World!");
data.put("bar", null);
String str = JSONObject.toJSONString(data, SerializerFeature.WriteMapNullValue);
System.out.println(str);
输出:
{"bar":null,"foo":"Hello World!"}
3、扩展
其他特性配置:
- QuoteFieldNames
使用单引号:
{'foo':'Hello World!'}
- WriteNullStringAsEmpty
String类型值为空则输出”“。
- WriteNullBooleanAsFalse
Boolean类型值为空则输出false。
- WriteNullNumberAsZero
Number类型值为空则输出0。
- WriteNullListAsEmpty
List类型值为空则输出[]。
- WriteDateUseDateFormat
全局修改日期格式。
JSONObject data = new JSONObject();
data.put("date", new Date());
String str = JSONObject.toJSONString(data);
System.out.println(str);
输出:
{"date":1612194055861}
JSONObject data = new JSONObject();
data.put("date", new Date());
//修改默认格式
JSON.DEFFAULT_DATE_FORMAT = "yyyy-MM-dd";
String str = JSONObject.toJSONString(data, SerializerFeature.WriteDateUseDateFormat);
System.out.println(str);
输出:
{"date":"2021-02-01"}
- PrettyFormat
格式化JSON缩进。
样例:
Example.java:
class Example{
private String s;
private Boolean b;
private Integer i;
private List<String> list;
public String getS() {
return s;
}
public void setS(String s) {
this.s = s;
}
public Boolean getB() {
return b;
}
public void setB(Boolean b) {
this.b = b;
}
public Integer getI() {
return i;
}
public void setI(Integer i) {
this.i = i;
}
public List<String> getList() {
return list;
}
public void setList(List<String> list) {
this.list = list;
}
}
JSONObject data = new JSONObject();
String value = null;
data.put("foo", value);
List<String> list = null;
data.put("bar", list);
Integer num = null;
data.put("num", num);
//与前面两个属性对比:WriteNullStringAsEmpty等属性对对象属性生效
data.put("example", new Example());
SerializerFeature[] features = new SerializerFeature[]{
SerializerFeature.WriteMapNullValue,
SerializerFeature.WriteNullStringAsEmpty,
SerializerFeature.WriteNullBooleanAsFalse,
SerializerFeature.WriteNullNumberAsZero,
SerializerFeature.WriteNullListAsEmpty,
SerializerFeature.PrettyFormat
};
String str = JSONObject.toJSONString(data, features);
System.out.println(str);
输出:
{
"bar":null,
"foo":null,
"num":null,
"example":{
"b":false,
"i":0,
"list":[],
"s":""
}
}