fastjson 问题

2023-11-17

问题

1.fastjson value 为null key 会丢失问题
2.SerializerFeature 配置参数

背景

和第三方系统进行对接,两边商量好了接口定义,有些是非必填项。从数据库查询出来的数据赋值给相应的key,有些String类型的 字段 查询语句里面没有对应的字段,默认是null。导致传过去的参数里面 value 为null 的key 都丢失

错误示例

 public static void main(String[] args) {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("ceshi", "12131231123");
        jsonObject.put("ceshi1", null);
        System.out.println("jsonObject.toJSONString() = " + jsonObject.toJSONString());
    }

运行结果

    jsonObject.toJSONString() = {"ceshi":"12131231123"}

小结

上面运行结果 key 为 ceshi1 的value 出现了丢失现象,这样导致对接方存在数据结构不完整的情况。等一系列的问题

解决方案

    public static void main(String[] args) {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("ceshi", "12131231123");
        jsonObject.put("ceshi1", null);
        System.out.println("jsonObject.toJSONString() = " + JSON.toJSONString(jsonObject, SerializerFeature.WriteMapNullValue));

    }

运行结果

 jsonObject.toJSONString() = {"ceshi":"12131231123","ceshi1":null}

小结

增加 SerializerFeature.WriteMapNullValue 这样子可以是 value 为null 的也可以正确输出

拓展

    public static void main(String[] args) {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("ceshi", "12131231123");
        jsonObject.put("枚举", PodToolEnum.DGP.getCode());
        jsonObject.put("时间", new Date());
        jsonObject.put("转义", "\t");
        List jihe = null;
        Integer num = null;
        Boolean flag = null;
        jsonObject.put("集合", jihe);
        jsonObject.put("数值", num);
        jsonObject.put("ceshi1", null);
        jsonObject.put("布尔", flag);

        System.out.println("jsonObject.toJSONString() = " + JSON.toJSONString(jsonObject,  SerializerFeature.UseSingleQuotes
                , SerializerFeature.UseISO8601DateFormat
                , SerializerFeature.PrettyFormat
                , SerializerFeature.WriteTabAsSpecial
                , SerializerFeature.WriteMapNullValue
                , SerializerFeature.WriteNullNumberAsZero
                , SerializerFeature.WriteNullListAsEmpty
                , SerializerFeature.WriteNullStringAsEmpty
                , SerializerFeature.WriteNullBooleanAsFalse
                , SerializerFeature.SortField));
    }

运行结果

jsonObject.toJSONString() = {
	'ceshi':'12131231123',
	'集合':null,
	'数值':null,
	'时间':'2023-01-31T10:00:01.895+08:00',
	'枚举':'5',
	'布尔':null,
	'ceshi1':null,
	'转义':'\t'
}

小结

上面 WriteNullNumberAsZero 、 WriteNullListAsEmpty 、WriteNullStringAsEmpty、WriteNullBooleanAsFalse 这几个配置项没有生效。

解决方案

public static void main(String[] args) {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("ceshi", "12131231123");
        jsonObject.put("枚举", PodToolEnum.DGP.getCode());
        jsonObject.put("时间", new Date());
        jsonObject.put("转义", "\t");
        List jihe = null;
        Integer num = null;
        Boolean flag = null;
        jsonObject.put("集合", jihe);
        jsonObject.put("数值", num);
        jsonObject.put("ceshi1", null);
        jsonObject.put("布尔", flag);

           ValueFilter filter = new ValueFilter() {
            @Override
            public Object process(Object obj, String s, Object v) {
                if (v == null) {
                    return "";
                }
                return v;
            }
        };

       System.out.println("jsonObject.toJSONString() = " + JSON.toJSONString(jsonObject,filter));
    }

运行结果

jsonObject.toJSONString() = {"ceshi":"12131231123","集合":"","数值":"","时间":1675130844125,"枚举":"5","布尔":"","ceshi1":"","转义":"\t"}

小结

fastjson 里面提供了一个过滤器的功能,可以自定义value key 的重写功能

参考资料

fastjson:SerializerFeature属性使用
过滤器功能

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

fastjson 问题 的相关文章

  • 将所有 BigDecimal 运算设置为特定精度?

    我的Java程序以高精度计算为中心 需要精确到至少120位小数 因此 程序中所有非整数都将由 BigDecimal 表示 显然 我需要指定 BigDecimal 的舍入精度 以避免无限小数表达式等 目前 我发现必须在 BigDecimal
  • 如何在谷歌地图中使用latlng字符串数组绘制多边形

    在我的应用程序中 我有包含 imagview 的 recyclerview 并且该 imageview 通过使用我存储在 sqlite 中的坐标包含静态地图图像 当我单击该图像时 我将该字符串数组格式的坐标传递给其他地图活动 然后使用该字符
  • 运行单个 Java 线程的双核 CPU 利用率[重复]

    这个问题在这里已经有答案了 可能的重复 多线程 Java 应用程序能否很好地利用多核机器 https stackoverflow com questions 1649402 would a multithreaded java applic
  • 术语“引用”的起源,如“通过引用传递”

    Java C 语言律师喜欢说他们的语言按值传递引用 这意味着 引用 是调用函数时复制的对象指针 同时 在 C 中 以及 Perl 和 PHP 中更动态的形式 引用是其他名称 或动态情况下的运行时值 的别名 我对这里的词源感兴趣 参考 一词的
  • 如何避免 Java 中的忙旋转

    我有一个多线程应用程序 其中一个线程向另一个线程发送消息 等待线程轮询消息并做出反应 处理锁 像这样 等待线程代码 while true if helloArrived System out println Got hello if bye
  • 向 JList 添加滚动条? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何将 JList 添加到 JScrollPane 把你的JList in a JScrollPane JScrollPane scrol
  • 使用 Hibernate 和 Apache DBCP 的 MySQL 连接池问题

    看来我的应用程序有问题 当应用程序在启动后闲置很长时间 我不确定确切的时间 时 我会在日志中收到以下错误消息 我使用 Spring Hibernate MySQL 和 ApacheDBCP 进行连接池 ERROR org hibernate
  • 如何显示/隐藏jsf组件

    在我的一个 JSF 应用程序中 顶部的标题部分包含 selectOneMenu 底部的内容部分显示过滤器组件 默认情况下 应用程序首先在顶部显示 selectOneMenu 数据 在底部显示相应的 Filter 信息 如果用户选择不同的se
  • IntSummaryStatistics的summaryStatistics方法

    为什么空 IntStream 上的 summaryStatistics 方法返回整数的最大和最小值作为流中存在的最大和最小 int 值 IntStream intStream IntStream of IntSummaryStatistic
  • 在 SWT 中单击鼠标触发事件?

    在SWT中 对于MouseListener接口 可用的方法有mouseUp mouseDown and mouseDoubleClick 如何根据用户点击触发事件 我们可以通过结合来做到这一点mouseUp and mouseDown 但没
  • FXML 文件中的 getHostServices().showDocument()

    有没有简单的方法可以将 getHostServices showDocument 命令放入 toHomepage 方法中 而不是执行一行又一行的代码 这样代码应该看起来干净简单 package sample import javafx ap
  • Java检测鼠标长按

    如果用户按下 JList 组件超过 3 秒 有什么方法可以捕获事件吗 我发现困难的部分是即使在用户松开鼠标左键之前也需要触发事件 这可以通过 mousePressed 和 mouseReleased 组合轻松完成 您可以在 mouseDow
  • Elasticsearch NodeBuilder 与 TransportClient

    对于其他 Elasticsearch 开发人员来说 这可能是一个非常简单 而且愚蠢 的问题 这两者之间有什么区别 我正在从 Java Web 应用程序连接到远程 Elasticsearch 服务器 到目前为止我一直在使用 Transport
  • 如何发现另一个应用程序的意图

    我正在尝试构建一个应用程序来接收来自 StumbleUpon 应用程序的共享 此时 我可以接收浏览器的 共享网址 但是当从 StumbleUpon 共享时 我的应用程序不会显示在列表中 我想我可能没有在清单中注册正确的意图 有什么方法可以找
  • Wildfly 10.1 消耗所有核心

    我们最近将银行应用程序从 java 1 6 升级到 1 8 将 jboss 4 x 升级到 wildfly 10 1 我们观察到 java 消耗了机器上可用的所有核心 10 有人可以告诉是什么原因吗 通常情况下 jboss 4 x 的最大
  • 找出该月第一个星期日/星期一等的日期

    我想在java中检测每个月第一周 第二周的第一个星期日 星期一的日期 我怎样才能实现它 我已经检查了 java 中的 Calendar 类和 Date 类 但无法找到解决方案 所以请帮助我解决这个问题 Calendar calendar C
  • Java“非法访问操作”方法将被弃用? [复制]

    这个问题在这里已经有答案了 JDK 9 JVM 发出非法访问操作警告后 如果您使用一些非法访问 例如setAccessible 我的问题 Is setAccessible 以后会被封吗 此功能的官方参考 如果将被弃用 在哪里 我在任何地方都
  • Java 应用程序启动,ProcessBuilder 一段时间后被阻止

    我正在开发一个 Java 桌面应用程序 我们称之为控制台 包含 3 个按钮 其中两个启动 Win32 应用程序 第三个应该启动一个可执行的 jar ProcessBuilder pb new ProcessBuilder java jar
  • 删除Java中重载的方法

    有2个重载方法 这些方法中的每一个都将一种类型的列表转换为不同类型的列表 但第一种方法使用比较器 class SomeClass public static
  • 用 lambda 表达式替换匿名函数

    我在 Java 8 映射操作中传递一个函数 Intellij 告诉我它可以用 lambda 表达式替换 但我不知道如何在不创建中间对象结构的情况下做到这一点 这就是我所做的 List

随机推荐

  • SpringBoot学习笔记35——实现List校验@Validated

    在 Controller 类上 加上 Validated 在需要校验的参数上加上 Valid 就可以校验list里的实体类的属性 还需要在统一异常处理类中添加异常处理 参数校验异常类 param exception return autho
  • redis未授权访问漏洞利用+redis日志分析

    redis未授权访问漏洞利用 redis日志分析 redis未授权访问 远程连接redis kali redis cli h IP redis常用语句 set key value 设置键值对 get key 获得值 incr intkey
  • 超分辨率学习记录

    超分辨率学习记录 超分定义 经典模型 前上采样 SRCNN 后上采样 FSRCNN 这篇博客主要内容来自于天池网站的超分辨率理论基础 同时对于其中涉及的学术名词也进行了解释 作为自己学习的记录 注 所有名词右上方带 的下面都有详细解释 博客
  • 最近点对问题

    分而治之 题目来源 Quoit Design Problem Description Have you ever played quoit in a playground Quoit is a game in which flat ring
  • 视频编解码(一):ffmpeg编码H.264帧类型判断

    本文主要讲述ffmpeg编码过程中是如何设置I帧 B帧及P帧的 以及如何通过代码判断帧类型 之前看过很多网上的文章 讲述如何判断I帧 B帧 P帧 然而都是停留在H 264官方文档中的定义 如果不结合ffmpeg 就仿佛纸上谈兵 有点不切实际
  • 人脸识别5.1- insightface人脸检测模型scrfd-训练实战笔记,目标检测的理论理解

    1 insightface detection scrfd模型训练 1 0 数据集 数据集下载说明 https github com deepinsight insightface tree master detection dataset
  • Java面向对象编程

    对于IP地址130 63 160 2 MASK为255 255 255 0 子网号为 A 160 2 B 160 C 63 160 D 130 63 160 答案 B 将网络物理地址转换为IP地址的协议是 A IP B ICMP C ARP
  • uni-app项目中引入uView组件库

    在uni app项目中引入uView组件库 其实uView的官方文档写的很清楚了 但是作为菜鸟踩过坑的我还是记录一下 什么是uView uView是uni app生态专用的UI框架 uni app 是一个使用 Vue js 开发所有前端应用
  • Linux 中的 chmod 命令及示例

    在 Unix 操作系统中 chmod命令用于更改文件的访问模式 该名称是change mode的缩写 其中规定每个文件和目录都有一组权限来控制权限 例如谁可以读取 写入或执行该文件 其中权限分为三类 同时读 写和执行 用 r w 和 x 表
  • Java程序员需看的面试题

    进大厂是大部分程序员的梦想 而进大厂的门槛也是比较高的 所以这里整理了一份阿里 美团 滴滴 头条等大厂面试大全 对于Java后端的朋友来说应该是最全面最完整的面试备战仓库 为了更好地整理每个模块 我也参考了很多网上的优质博文和项目 力求不漏
  • 在父子页面嵌套的结构中,当父页面完成某个操作后给子页面一个回调函数

    企业级系统中有一种常见的页面结构 所有的表单都套在一个父页面里 有业务场景 要求父页面在子页面完成加载后做一些操作 如下 这些代码不是本文的重点内容 不做介绍了 这里的iframe是元素 init my iframe function if
  • 策略模式对象初始化为空解决方案及项目中具体的使用

    使用类 Component public class TaskReceiver Autowired TaskHandlerMapping mapper RabbitHandler RabbitListener queues MqTaskCo
  • 【OPENGLES】opengles-jni实例1

    首先 说明下为什么要用jni实现opengl es 在进行移动端图像算法开发的过程中 需要完成对大量的数据进行处理 opengl是在进行图形渲染或者大批量图像运算处理时有着很大的优势 如果能够在算法库开发中加入opengl 则对于提升算法运
  • dos磁盘管理命令

    dos磁盘管理命令 前言 磁盘管理命令用于日常的磁盘维护 DOS命令行提供了多种文件管理命令用于设置和管理磁盘列表 由于很多磁盘在没有安装图形界面的时候就需要对其进行操作 所以掌握DOS命令行下的磁盘管 理命令对系统管理员是十分必要的 磁盘
  • 区域气象-大气化学在线耦合模式(WRF/Chem)在大气环境领域实践技术应用

    大气污染是工农业生产 生活 交通 城市化等方面人为活动的综合结果 同时气象因素是控制大气污染的关键自然因素 大气污染问题既是局部 当地的 也是区域的 甚至是全球的 本地的污染物排放除了对当地造成严重影响外 同时还会在动力输送作用下 极大地影
  • 【小程序】解析小程序原理

    本文首发自 前端修罗场 一个专注 Web 技术 答疑解惑 面试辅导 职业发展的社区 实际学习过程中 有些同学常常会对小程序和 Web 应用之间的差别产生疑惑 它们之间到底有什么不同 Web 应用不能作为小程序吗 本期文章将会带你比较小程序和
  • JS如何判断是否为null、undefined、NaN

    判断null var exp null if exp typeof exp undefined exp 0 alert is null typeof exp undefined 排除了 undefined exp 0 排除了数字零和 fal
  • 【观影笔记】地平线:大数据时代(BBC)

    地平线 大数据时代 BBC 影片中的实例 大数据分析所需要素 感悟 影片中的实例 洛杉矶 利用预测地震余震发生的模型来预测犯罪 数据挖掘起源 约翰 格兰特Graunt 伦敦黑死病死亡记录 Phil Beales 基因生物学寻找疾病治疗方法
  • PostgreSQL 基本安装总结

    一 Mac 环境下的安装 brew install postgresql 1 1 查看当前环境版本 pg ctl V 1 2 初始化数据库 在开始使用数据库前 需要在磁盘上初始化一个数据库存储区域 通常称之为一个数据库集簇 SQL标准使用的
  • fastjson 问题

    问题 1 fastjson value 为null key 会丢失问题 2 SerializerFeature 配置参数 背景 和第三方系统进行对接 两边商量好了接口定义 有些是非必填项 从数据库查询出来的数据赋值给相应的key 有些Str