在Java开发中,通常需要将一个实体对象转换成Json字符串,使用FastJson来实现这种转换十分方便,只要使用FastJson中JSONObject静态类提供的toJSONString()静态方法即可,但是如果不了解这个方法,很有可能就会使得转换后的Json不合自己的要求。
使用JSONObject把实体对象转换成Json字符串时,如果实体对象中有些属性的值为null,则默认转换后的Json字符串中是不包含这些值为null的属性。
2.1 此程序演示了使用JSONObject提供的以下两种方法将实体对象转换成Json字符串:
public static String toJSONString(Object object, boolean prettyFormat);
public static String toJSONString(Object object, SerializerFeature... features);
2.2 Java程序完整代码如下:
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
/**
* 使用FastJson将实体对象转换成Json字符串测试类
*/
public class FastJsonApplication {
public static void main(String[] args) {
User user = new User();
user.setId(1L);
user.setUsername("张三");
user.setPassword("");
user.setMobile(null);
/**
* 忽略值为null的属性
*/
String jsonUser = JSONObject.toJSONString(user, true);
System.out.println(jsonUser);
/**
* 忽略值为null的属性
*/
jsonUser = JSONObject.toJSONString(user, SerializerFeature.PrettyFormat);
System.out.println(jsonUser);
/**
* 包括值为null的属性
*/
jsonUser = JSONObject.toJSONString(user, SerializerFeature.PrettyFormat, SerializerFeature.WriteMapNullValue);
System.out.println(jsonUser);
}
/**
* 用户实体类
*/
public static class User {
private Long id;
private String username;
private String password;
private String mobile;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
}
}
2.3 运行结果:
说明:第一次和第二次输出的Json字符串中都没有mobile这个属性,因为该属性的值为null。
public static String toJSONString(Object object, boolean prettyFormat):
该方法将实体对象转换成Json字符串时默认忽略值为null的属性。
public static String toJSONString(Object object, SerializerFeature… features):
该方法将实体对象转换成Json字符串时,如果不传递参数SerializerFeature.WriteMapNullValue,则忽略值为null的属性。
public static String toJSONString(Object object, SerializerFeature… features)方法可以接收多个SerializerFeature类型的参数,而SerializerFeature是枚举类型,其中定义了如下的一些枚举对象:
package com.alibaba.fastjson.serializer;
public enum SerializerFeature {
QuoteFieldNames,
UseSingleQuotes,
WriteMapNullValue,
WriteEnumUsingToString,
WriteEnumUsingName,
UseISO8601DateFormat,
WriteNullListAsEmpty,
WriteNullStringAsEmpty,
WriteNullNumberAsZero,
WriteNullBooleanAsFalse,
SkipTransientField,
SortField,
/** @deprecated */
@Deprecated
WriteTabAsSpecial,
PrettyFormat,
WriteClassName,
DisableCircularReferenceDetect,
WriteSlashAsSpecial,
BrowserCompatible,
WriteDateUseDateFormat,
NotWriteRootClassName,
/** @deprecated */
DisableCheckSpecialChar,
BeanToArray,
WriteNonStringKeyAsString,
NotWriteDefaultValue,
BrowserSecure,
IgnoreNonFieldGetter,
WriteNonStringValueAsString,
IgnoreErrorGetter,
WriteBigDecimalAsPlain,
MapSortField;
/**
* 省略其它代码
* /
}
JSONObject.toJSONString()包含或排除指定的属性这篇文章演示了使用SerializeFilter来指定包含或者排除的属性,使得生成的JSON字符串中包含或者不包含某些属性。