前言

Java对象在转json的时候,如果对象里面有属性值为null的话,那么在json序列化的时候要不要序列出来呢?对比以下json转换方式

一、fastJson

1、fastJson在转换java对象为json的时候,默认是不序列化null值对应的key的

也就是说当对象里面的属性为空的时候,在转换成json时,不序列化那些为null值的属性 
具体案例如下:
AutoPartsSearchRequest 有以下属性: 
public static void main(String[] args) { AutoPartsSearchRequest request = new AutoPartsSearchRequest(); request.setKeywords("123"); request.setSortingField("234242"); String str = JSONObject.toJSONString(request);//fastjson默认转换是不序列化null值对应的key的 System.out.println(str); }

输出结果:{"keywords":"123","sortingField":"234242"}  , 没有序列化那些值为null的属性

2、但是如果想把null对应的key序列化出来呢?

那就要仔细看看fastjson转换java对象为json的时候的入参了:也就是这个方法:
JSONObject.toJSONString(Object object, SerializerFeature... features)

Fastjson的SerializerFeature序列化属性:
QuoteFieldNames———-输出key时是否使用双引号,默认为true
WriteMapNullValue——–是否输出值为null的字段,默认为false
WriteNullNumberAsZero—-数值字段如果为null,输出为0,而非null WriteNullListAsEmpty—–List字段如果为null,输出为[],而非null WriteNullStringAsEmpty—字符类型字段如果为null,输出为”“,而非null WriteNullBooleanAsFalse–Boolean字段如果为null,输出为false,而非null

结合上面,SerializerFeature... features是个数组,那么我们可以传入我们想要的参数,比如想序列化null,案例如下:

public static void main(String[] args) { AutoPartsSearchRequest request = new AutoPartsSearchRequest(); request.setKeywords("123"); request.setSortingField("234242"); String str = JSONObject.toJSONString(request, SerializerFeature.WriteMapNullValue); System.out.println(str); }

输出结果如下:

3、想字符类型字段如果为null,转换输出为”“,而非null ,需要多加一个参数:WriteNullStringAsEmpty, 案例如下:

public static void main(String[] args) { AutoPartsSearchRequest request = new AutoPartsSearchRequest(); request.setKeywords("123"); request.setSortingField("234242"); String str = JSONObject.toJSONString(request, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullStringAsEmpty); System.out.println(str); }

输出结果如下:

二、Jackson

1、jackson默认是序列化null对应的key的,也就是说不管你对象属性有没有值,在转换json的时候都会被序列化出来

public static void main(String[] args) throws JsonGenerationException, JsonMappingException, IOException { AutoPartsSearchRequest request = new AutoPartsSearchRequest(); request.setKeywords("123"); request.setSortingField("234242"); ObjectMapper mapper = new ObjectMapper(); String str = mapper.writeValueAsString(request); System.out.println(str); //输出结果(此处就不格式化了):{"sortingField":"234242","partsClassifyId":null,"partsSubClassifyId":null,"sortingDirection":null:...... }

2、同理,想要不序列化null也是可以的,具体如下:

1.实体上@JsonInclude(Include.NON_NULL) //将该标记放在属性上,如果该属性为NULL则不参与序列化
//如果放在类上边,那对这个类的全部属性起作用
//Include.Include.ALWAYS 默认 //Include.NON_DEFAULT 属性为默认值不序列化 //Include.NON_EMPTY 属性为 空(“”) 或者为 NULL 都不序列化 //Include.NON_NULL 属性为NULL 不序列化 2.代码上 ObjectMapper mapper = new ObjectMapper(); mapper.setSerializationInclusion(Include.NON_NULL); //通过该方法对mapper对象进行设置,所有序列化的对象都将按改规则进行系列化 //Include.Include.ALWAYS 默认 //Include.NON_DEFAULT 属性为默认值不序列化 //Include.NON_EMPTY 属性为 空(“”) 或者为 NULL 都不序列化 //Include.NON_NULL 属性为NULL 不序列化 

注意:只对VO起作用,Map List不起作用,另外jackson还能过滤掉你设置的属性,具体的就各位自己去研究源码了

或者参照: jackson详解

三、Gson

1、gson和fastjson一样,默认是不序列化null值对应的key的,具体案例如下:

public static void main(String[] args) throws JsonGenerationException, JsonMappingException, IOException { AutoPartsSearchRequest request = new AutoPartsSearchRequest(); request.setKeywords("123"); request.setSortingField("234242"); Gson g = new GsonBuilder().create(); String str = g.toJson(request); System.out.println(str); //输出结果:{"sortingField":"234242","keywords":"123"} }

2、若是想序列化null值对应的key,只需要将以上创建代码改成以下代码就行:

Gson g = new GsonBuilder().serializeNulls().create();

案例就不写了

3、若是想转行null为空字符串"",则需要手动处理了

具体参考: gson转换null为空字符串
from: http://www.voidcn.com/blog/shijing266/article/p-6126128.html

转载于:https://www.cnblogs.com/GarfieldEr007/p/6822316.html

FastJson、Jackson、Gson进行Java对象转换Json的细节处理相关推荐

  1. gson转对象变成null_FastJson、Jackson、Gson进行Java对象转换Json的细节处理

    转 https://blog.csdn.net/moneyshi/article/details/51830329 Java对象转换Json的细节处理 前言 Java对象在转json的时候,如果对象里 ...

  2. 使用Gson将Java对象转换为JSON

    Gson是Google的一个开源项目,可以将Java对象转换成JSON,也可能将JSON转换成Java对象. Gson里最重要的对象有2个Gson 和 GsonBuilder Gson有2个最基本的方 ...

  3. Java对象转换成JSON对象/JSON对象转换成JSON字符串/JSON字符串转换成JS对象

    文章目录 后端部分 前端部分 后端部分 Option op = new Option("海淀","hd");//java对象转换json对象 JSONObjec ...

  4. java处理json字符串_常见java对象转换为json字符串处理!!!

    1.JSON简介 1. 概念: JavaScript Object NotationJavaScript对象表示法 Person p = new Person(); p.setName("张 ...

  5. java 视图对象转换,使用spring boot开发时java对象和Json对象转换的问题_JavaScript_网络编程...

    将java对象转换为on对象,市面上有很多第三方jar包,如下: jackson(最常用) com.fasterxml.jackson.core jackson-databind 2.11.2 gso ...

  6. java对象与Json字符串之间的转化(fastjson)

    1. 首先引入jar包 在pom.xml文件里加入下面依赖: <dependency><groupId>com.alibaba</groupId><artif ...

  7. java对象与json字符串的互相转换

    java对象与json字符串的互相转换 1.采用 net.sf.json.JSONObject maven依赖包: 1 <dependency> 2 <groupId>net. ...

  8. json数据解析与JAVA对象转换以及在JQUERY中的使用

    JSON基础了解 JSON:JavaScript 对象表示法(JavaScript Object Notation). JSON 是存储和交换文本信息的语法.类似 XML. JSON 比 XML 更小 ...

  9. json对象,java对象,json字符串,java字符串转换方式,没写的自己去看源码!

    package com.sgai.property;import com.alibaba.druid.support.json.JSONUtils; import com.alibaba.fastjs ...

最新文章

  1. Java特性-Collection和Map
  2. wxWidgets:wxCheckListBox类用法
  3. Building JavaScript Games for Phones Tablets and Desktop(3)-创造一个游戏世界
  4. 云原生ASP.NET Core程序的可监测性和可观察性
  5. python 录入数据不重复_python Django批量导入不重复数据
  6. 深入剖析Android音频(二)AudioSystem
  7. 如何用wordpress搭建个人博客
  8. Python实践通过使用XGBoost中的尽早停止【Early Stopping】策略来避免过度拟合
  9. PPT实现单页点名的方式
  10. FFT运算的加深理解——频谱泄露
  11. Excel / WPS 下拉选择数据
  12. Mac制作启动U盘解决重启按option不能识别的问题
  13. 计算机监控系统在地铁中的应用有哪些,电力监控系统(PSCADA)在地铁中应用.doc
  14. 135端口入侵教程(仅学习用)
  15. 2018年最新从PayPal提现美金的方法(实战教程)!
  16. OSChina 周六乱弹 —— 周末万岁!
  17. 【雕爷学编程】Arduino动手做(67)---BMP180气压传感器
  18. 组装计算机需要哪九件部件,组装各种电脑配件的规则是什么?组装电脑各配件规则介绍...
  19. 二元logistics回归
  20. 它们改变了整个世界 盘点50个最伟大的游戏创意

热门文章

  1. 电源两端并联一个电容的作用(
  2. Sparsity稀疏编码(一)
  3. Vs定义超大数组时,stack OverFlow的解决方法
  4. css 加随机数 引用_在CSS中生成随机数
  5. CSS设置样式时,鼠标移动到div上,发生抖动问题解决办法
  6. Pycharm 社区版本Database Navigator 安装教程
  7. ListView实现分页
  8. 从MVC到前后端分离
  9. Atitit 热烈庆祝读经器项目圆满完成
  10. 【 D3.js 入门系列 --- 2 】 怎样使用数据和选择元素