fastjson,對象轉json字符串的過程中對value為null的值的一些處理


前言

fastjson是一個非常好用的java庫,用於操作對象json序列化等等。

問題

最近在寫代碼的時候遇到問題,通過JSON.toJSONString方法將一個實體對象轉為json字符串,轉出來發現原本
對象中value為null的字段被過濾掉了。。。

實體對象

package so.sao.code;

import lombok.Data;

@Data
public class Person {

    String name;

    String gender;

    String nickname;

    String phone;

}

測試代碼

    public static void main(String[] args) {
        Person person = new Person();
        person.setName("wyz");
        String json = JSON.toJSONString(person);
        System.out.println(json);
    }

輸出結果

發現只有設置了值的字段name才有輸出,而其余為空的字段則都被過濾掉了

解決

怎樣讓值為null的key不被過濾掉

  • 設置SerializerFeature

設置SerializerFeature里面有很多特性可以使用

要讓空值也能夠輸出的特性值是SerializerFeature.WriteMapNullValue

改造代碼:

    public static void main(String[] args) {
        Person person = new Person();
        person.setName("wyz");
//        String json = JSON.toJSONString(person);
//        System.out.println(json);

        // 設置SerializerFeature
        System.out.println(JSON.toJSONString(person, SerializerFeature.WriteMapNullValue));
    }

輸出結果:

值為null屬性直接放到json字符串里面不太好看,能不能把null值轉成其他的值,比如空字符串

這個時候就需要用到過濾器了,仔細看看JSON.toJSONString的其他幾個方法

toJSONString方法中可以放一個或多個過濾器,常用的過濾器有以下幾種:

要實現把null值轉為空字符串的效果可以使用ValueFilter

代碼實現:

    public static void main(String[] args) {
        Person person = new Person();
        person.setName("wyz");
//        String json = JSON.toJSONString(person);
//        System.out.println(json);

        // 設置SerializerFeature
//        System.out.println(JSON.toJSONString(person, SerializerFeature.WriteMapNullValue));

        // 設置NameFilter
        System.out.println(JSON.toJSONString(person, (ValueFilter) (object, name, value) -> {
            if(value == null){
                return "";
            }

            return value;
        }));
    }

輸出結果:

一個特殊的需求,有的值為null需要過濾,有的又不需要過濾。。。(這就是我遇到的)

使用PropertyFilter

代碼實現:

    public static void main(String[] args) {
        Person person = new Person();
        person.setName("wyz");
//        String json = JSON.toJSONString(person);
//        System.out.println(json);

        // 設置SerializerFeature
//        System.out.println(JSON.toJSONString(person, SerializerFeature.WriteMapNullValue));

        // 設置NameFilter
//        System.out.println(JSON.toJSONString(person, (ValueFilter) (object, name, value) -> {
//            if(value == null){
//                return "";
//            }
//
//            return value;
//        }));

        // 設置PropertyFilter
        System.out.println(JSON.toJSONString(person, new PropertyFilter() {
            @Override
            public boolean apply(Object object, String name, Object value) {
                return name.equals("gender") || value != null;
            }
        }, SerializerFeature.WriteMapNullValue));
    }

輸出結果:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM