Map < String,Object > jsonMap = new HashMap< String,Object>();
jsonMap.put("a",1);
jsonMap.put("b","");
jsonMap.put("c",null);
jsonMap.put("d","wuzhuti.cn");
String str = JSONObject.toJSONString(jsonMap);
System.out.println(str);
//输出结果:{"a":1,"b":"",d:"wuzhuti.cn"}
从输出结果可以看出,null对应的key已经被过滤掉;这明显不是我们想要的结果,这时我们就需要用到fastjson的SerializerFeature序列化属性
也就是这个方法:JSONObject.toJSONString(Object object,SerializerFeature… features)
SerializerFeature有用的一些枚举值
QuoteFieldNames———-输出key时是否使用双引号,默认为true
WriteMapNullValue——–是否输出值为null的字段,默认为false
WriteNullNumberAsZero—-数值字段如果为null,输出为0,而非null
WriteNullListAsEmpty—–List字段如果为null,输出为[],而非null
WriteNullStringAsEmpty—字符类型字段如果为null,输出为”“,而非null
WriteNullBooleanAsFalse–Boolean字段如果为null,输出为false,而非null
例如:
Map < String,"wuzhuti.cn");
String str = JSONObject.toJSONString(jsonMap,SerializerFeature.WriteMapNullValue);
System.out.println(str);
//输出结果:{"a":1,"c":null,"d":"wuzhuti.cn"}
但是,如果把WriteNullStringAsEmpty也加进去,为毛不起作用?
String str = JSONObject.toJSONString(jsonMap,SerializerFeature.WriteMapNullValue,SerializerFeature.WriteNullStringAsEmpty);
System.out.println(str);
//输出结果:{"a":1,"d":"wuzhuti.cn"}
目前的解决办法是加一个过滤器
private ValueFilter filter = new ValueFilter() {
@Override
public Object process(Object obj,String s,Object v) {
if(v==null)
return "";
return v;
}
};
JSON.toJSONString(jsonMap,filter)
fastjson github: https://github.com/alibaba/fastjson
SerializerFeature.WriteMapNullValue 是否输出值为null的字段,默认为false也就是说有null时会输出而不是忽略(默认策略是忽略,所以看不到为null的字段)
WriteNullStringAsEmpty—字符类型字段如果为null,而非null
注意是字段是字段是字段,而不是json.put(“key”,null),所以用它时,字段为null的可以转换为空字符串。
如果让输出的json中所有为null的字符串都变成空字符串,最简单的做法就是加一个值过滤器,这样就避免了有的字段为null,有的字段为空字符的现象。
public class Demo1 {
public class Student {
private String name;
private int age;
private boolean isMale;
private Student gf;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public boolean isMale() {
return isMale;
}
public void setMale(boolean isMale) {
this.isMale = isMale;
}
public Student getGf() {
return gf;
}
public void setGf(Student gf) {
this.gf = gf;
}
}
private static ValueFilter filter = new ValueFilter() {
@Override
public Object process(Object obj,Object v) {
if (v == null)
return "";
return v;
}
};
public static void main(String[] args) {
new Demo1().foo();
new Demo1().bar();
}
private void foo() {
System.out.println("foo()---------------------------");
JSONObject j1 = new JSONObject();
j1.put("name","zhangsan");
j1.put("age",13);
j1.put("isMale",true);
j1.put("gf",null);
Map<String,Object> fav = new HashMap<String,Object>();
Set<String> books = new HashSet<String>();
books.add("三国");
books.add("史记");
fav.put("history",books);
String[] arts = new String[] {};
fav.put("arts",arts);
String[] musics = new String[] { "北京欢迎你","画心" };
fav.put("musics",musics);
List<String> sports = new ArrayList<String>();
fav.put("sports",sports);
j1.put("fav",fav);
List<Student> classmates = new ArrayList<Student>();
classmates.add(new Student());
Student lisi = new Student();
lisi.setMale(false);
lisi.setAge(11);
classmates.add(lisi);
Student zhangsan = new Student();
zhangsan.setAge(13);
zhangsan.setName("张三");
zhangsan.setMale(true);
zhangsan.setGf(lisi);
classmates.add(zhangsan);
j1.put("classmates",classmates);
String str = null;
j1.put("str",str);
System.out.println(j1.toString());
System.out
.println(JSON.toJSONString(j1,SerializerFeature.WriteMapNullValue,SerializerFeature.WriteNullStringAsEmpty));
System.out.println(
JSON.toJSONString(j1,filter,SerializerFeature.WriteNullStringAsEmpty));
System.out.println(JSON.toJSONString(j1,SerializerFeature.WriteNullStringAsEmpty));
Map<String,JSONObject> m = new HashMap<String,JSONObject>();
m.put("key",j1);
System.out.println(
JSON.toJSONString(m,SerializerFeature.WriteNonStringKeyAsString,SerializerFeature.WriteNullStringAsEmpty));
System.out.println(JSON.toJSONString(m,SerializerFeature.WriteNullStringAsEmpty));
}
private void bar() {
System.out.println("bar()---------------------------");
Student zhangsan = new Student();
zhangsan.setAge(13);
zhangsan.setName("张三");
zhangsan.setMale(true);
Student lisi = new Student();
// lisi.setName("lisi");
lisi.setMale(false);
lisi.setAge(11);
zhangsan.setGf(lisi);
System.out.println(
JSON.toJSONString(zhangsan,SerializerFeature.WriteNullStringAsEmpty));
System.out.println(JSON.toJSONString(zhangsan,SerializerFeature.WriteMapNullValue));
System.out.println(JSON.toJSONString(zhangsan,SerializerFeature.WriteNullStringAsEmpty));
System.out.println(JSON.toJSONString(zhangsan));
System.out.println(JSON.toJSONString(zhangsan,filter));
System.out.println(JSON.toJSONString(zhangsan,SerializerFeature.WriteNullStringAsEmpty));
}
}
foo()---------------------------
{"isMale":true,"name":"zhangsan","classmates":[{"age":0,"male":false},{"age":11,{"age":13,"gf":{"$ref":"$.classmates[1]"},"male":true,"name":"张三"}],"fav":{"sports":[],"musics":["北京欢迎你","画心"],"history":["史记","三国"],"arts":[]},"age":13}
{"str":null,"isMale":true,"gf":null,"male":false,"name":""},"age":13,"gf":null}
{"str":"","gf":"","gf":""}
{"isMale":true,"age":13}
{"str":"","gf":""}
{"key":{"isMale":true,"gf":{"$ref":"$.key.classmates[1]"},"age":13}}
{"key":{"str":"","gf":""}}
bar()---------------------------
{"age":13,"gf":{"age":11,"name":"张三"}
{"age":13,"name":null},"name":"张三"}