JSONObject.toJSONString()默认忽略值为null的属性

1 背景

在Java开发中,通常需要将一个实体对象转换成Json字符串,使用FastJson来实现这种转换十分方便,只要使用FastJson中JSONObject静态类提供的toJSONString()静态方法即可,但是如果不了解这个方法,很有可能就会使得转换后的Json不合自己的要求。

使用JSONObject把实体对象转换成Json字符串时,如果实体对象中有些属性的值为null,则默认转换后的Json字符串中是不包含这些值为null的属性。

2 演示程序

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 运行结果:
JSONObject.toJSONString()默认忽略值为null的属性_第1张图片
说明:第一次和第二次输出的Json字符串中都没有mobile这个属性,因为该属性的值为null。

3 总结:

public static String toJSONString(Object object, boolean prettyFormat):
该方法将实体对象转换成Json字符串时默认忽略值为null的属性。

public static String toJSONString(Object object, SerializerFeature… features):
该方法将实体对象转换成Json字符串时,如果不传递参数SerializerFeature.WriteMapNullValue,则忽略值为null的属性。

4 扩展

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字符串中包含或者不包含某些属性。

如果觉得本文对您有帮助,请关注博主的微信公众号,会经常分享一些Java和大数据方面的技术案例!
JSONObject.toJSONString()默认忽略值为null的属性_第2张图片

你可能感兴趣的:(踩过的坑)