对象转json字符串的过程中对value为null的值的一些处理

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 Python 机器学习入门之pandas的使用


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、pandas是什么?

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

二、使用步骤

1.引入库

代码如下(示例):

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import  ssl
ssl._create_default_https_context = ssl._create_unverified_context

2.读入数据

代码如下(示例):

data = pd.read_csv(
    'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())

该处使用的url网络请求的数据。


提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

fastjson,对象转json字符串的过程中对value为null的值的一些处理

前言

fastjson是一个非常好用的java库,用于操作对象json序列化等等。

问题
最近在写代码的时候遇到问题,通过JSON.toJSONString方法将一个实体对象转为json字符串,转出来发现原本
对象中value为null的字段被过滤掉了。。。

总结

1.实体对象

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));
    }

输出结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值