- Java对象转换Json的细节处理
前言
Java对象在转json的时候,如果对象里面有属性值为null的话,那么在json序列化的时候要不要序列出来呢?对比以下json转换方式
一、fastJson
1、fastJson在转换java对象为json的时候,默认是不序列化null值对应的key的
也就是说当对象里面的属性为空的时候,在转换成json时,不序列化那些为null值的属性

具体案例如下:
AutoPartsSearchRequest 有以下属性:

1. public static void main(String[] args) {
2. AutoPartsSearchRequest request = new AutoPartsSearchRequest();
3. request.setKeywords("123");
4. request.setSortingField("234242");
5. String str = JSONObject.toJSONString(request);//fastjson默认转换是不序列化null值对应的key的
6. System.out.println(str);
7. }

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

2、但是如果想把null对应的key序列化出来呢?
那就要仔细看看fastjson转换java对象为json的时候的入参了:也就是这个方法:

JSONObject.toJSONString(Object object, SerializerFeature... features)

Fastjson的SerializerFeature序列化属性:

8. QuoteFieldNames———-输出key时是否使用双引号,默认为true
9. WriteMapNullValue——–是否输出值为null的字段,默认为false
10. WriteNullNumberAsZero—-数值字段如果为null,输出为0,而非null
11. WriteNullListAsEmpty—–List字段如果为null,输出为[],而非null
12. WriteNullStringAsEmpty—字符类型字段如果为null,输出为”“,而非null
13. WriteNullBooleanAsFalse–Boolean字段如果为null,输出为false,而非null

结合上面,SerializerFeature... features是个数组,那么我们可以传入我们想要的参数,比如想序列化null,案例如下:
14. public static void main(String[] args) {
15. AutoPartsSearchRequest request = new AutoPartsSearchRequest();
16. request.setKeywords("123");
17. request.setSortingField("234242");
18. String str = JSONObject.toJSONString(request, SerializerFeature.WriteMapNullValue);
19. System.out.println(str);
20. }

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

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

二、Jackson

1、jackson默认是序列化null对应的key的,也就是说不管你对象属性有没有值,在转换json的时候都会被序列化出来
29. public static void main(String[] args) throws JsonGenerationException, JsonMappingException, IOException {
30. AutoPartsSearchRequest request = new AutoPartsSearchRequest();
31. request.setKeywords("123");
32. request.setSortingField("234242");
33. ObjectMapper mapper = new ObjectMapper();
34. String str = mapper.writeValueAsString(request);
35. System.out.println(str);
36. //输出结果(此处就不格式化了):{"sortingField":"234242","partsClassifyId":null,"partsSubClassifyId":null,"sortingDirection":null:......
37. }

2、同理,想要不序列化null也是可以的,具体如下:
38. 1.实体上
39. @JsonInclude(Include.NON_NULL)
40.
41. //将该标记放在属性上,如果该属性为NULL则不参与序列化
42. //如果放在类上边,那对这个类的全部属性起作用
43. //Include.Include.ALWAYS 默认
44. //Include.NON_DEFAULT 属性为默认值不序列化
45. //Include.NON_EMPTY 属性为 空(“”) 或者为 NULL 都不序列化
46. //Include.NON_NULL 属性为NULL 不序列化
47.
48.
49. 2.代码上
50. ObjectMapper mapper = new ObjectMapper();
51.
52. mapper.setSerializationInclusion(Include.NON_NULL);
53.
54. //通过该方法对mapper对象进行设置,所有序列化的对象都将按改规则进行系列化
55. //Include.Include.ALWAYS 默认
56. //Include.NON_DEFAULT 属性为默认值不序列化
57. //Include.NON_EMPTY 属性为 空(“”) 或者为 NULL 都不序列化
58. //Include.NON_NULL 属性为NULL 不序列化

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

三、Gson

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

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

2、若是想序列化null值对应的key,只需要将以上创建代码改成以下代码就行:
Gson g = new GsonBuilder().serializeNulls().create();

案例就不写了

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

FastJson、Jackson、Gson进行Java对象转换Json的更多相关文章

  1. FastJson、Jackson、Gson进行Java对象转换Json细节处理

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

  2. FastJson、Jackson、Gson进行Java对象转换Json的细节处理

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

  3. GSON中Java对象与JSON互相转换——(一)

    json的转换插件是通过java的一些工具,直接将java对象或集合转换成json字符串. 常用的json转换工具有如下几种: 1)jsonlib 2)Gson:google 3)fastjson:阿 ...

  4. Java对象转换Json的细节处理

    一.fastJson 1.fastJson在转换java对象为json的时候,默认是不序列化null值对应的key的 也就是说当对象里面的属性为空的时候,在转换成json时,不序列化那些为null值的 ...

  5. 使用Jackson来实现Java对象与JSON的相互转换的教程

    一.入门Jackson中有个ObjectMapper类很是实用,用于Java对象与JSON的互换.1.JAVA对象转JSON[JSON序列化] 1 2 3 4 5 6 7 8 9 10 11 12 1 ...

  6. JAVA对象转换JSON

    1. 把java 对象列表转换为json对象数组,并转为字符串 复制代码 代码如下: JSONArray array = JSONArray.fromObject(userlist); String ...

  7. JackSon将java对象转换为JSON字符串

    JackSon可以将java对象转换为JSON字符串,步骤如下: 1.导入JackSon 的jar包 2.创建ObjectMapper对象 3.使用ObjectMapper对象的writeValueA ...

  8. (后端)JackSon将java对象转换为JSON字符串(转)

    转载小金金金丶园友: JackSon可以将java对象转换为JSON字符串,步骤如下: 1.导入JackSon 的jar包 2.创建ObjectMapper对象 3.使用ObjectMapper对象的 ...

  9. json相关类库,java对象与json相互转换

    有效选择七个关于Java的JSON开源类库 转自:http://www.open-open.com/lib/view/open1397870197828.html 翻译: (英语原文:http://w ...

  10. Java对象、Json、Xml转换工具Jackson使用

    在Java项目中將一个对象转换成一段Json格式的字符串是非常常见的,能够实现这种需求的工具包也比较多,例如Gson.JSON-lib.Jackson等等.本文主要介绍Jackson的使用,Jacks ...

随机推荐

  1. Programming abstractions in C阅读笔记:p84-p87

    <Programming Abstractions In C>学习第43天,p84-p87总结. 一.技术总结 1.record record也称为structure(结构体),是一种数据 ...

  2. 实在智能TARS-RPA-Agent,业界首发的产品级大模型Agent有何非凡之处?

    融合LLM的RPA进化到什么程度? AIGC如何借AI Agent落地? 像生成文本一样生成流程的ChatRPA,能够提升RPA新体验? 边探索边创建的ChatRPA,能否破解RPA与LLM融合难题? ...

  3. 谈一谈电商api的未来

    随着互联网的飞速发展,电商行业已经成为了现代消费的主流模式.在电商平台上,商品的交易.物流.支付等环节都需要使用API(Application Programming Interface)接口来实现信 ...

  4. 作为一个客户经理你一个如何给客户介绍API接口

    随着科技的发展,API(Application Programming Interface,应用程序接口)的应用已经逐渐普及,而API接口作为现代企业实现智能化运营和管理的重要工具之一,也备受关注.作 ...

  5. fastapi启动后访问docs不显示页面的问题

    笔者之前正常使用fastapi的docs接口进行各种接口调试,使用很正常,之前安装也都是正常安装流程,没有做任何修改,可以突然有一天不知道为啥,docs接口打开是空白的,接口也没有报错,就是空白,摸索 ...

  6. 文心一言 VS 讯飞星火 VS chatgpt (95)-- 算法导论9.2 4题

    四.用go语言,假设用RANDOMIZED-SELECT 去选择数组 A=(3,2,9,0,7,5,4,8,6,1)的最小元素,给出能够导致 RANDOMIZED-SELECT最坏情况发生的一个划分序 ...

  7. 使用Triton部署chatglm2-6b模型

    一.技术介绍 NVIDIA Triton Inference Server是一个针对CPU和GPU进行优化的云端和推理的解决方案. 支持的模型类型包括TensorRT.TensorFlow.PyTor ...

  8. DESTOON做中英双语言(多语言)切换版本具体详解

    第一次发原创好激动,该注意点什么? 在开发过程中用户有许多要求,比如这个多语言切换就是一个需求. 首先讲解一下DESTOON(DT)后台系统如何做这个中英.甚至多语言切换的这个功能. DT本身不自带多 ...

  9. 前端设计模式:工厂模式(Factory)

    00.基础概念 工厂模式封装了对象的创建new(),将消费者(使用)和生产者(实现)解耦. 工厂是干什么的?工厂是生产标准规格的商品的地方,建好工厂,投入原料(参数),产出特定规格的产品.so,工厂模 ...

  10. 时髦称呼:SQL递归"语法糖"的用法

    Oracle函数sys_connect_by_path 详解 语法:Oracle函数:sys_connect_by_path 主要用于树查询(层次查询) 以及 多列转行.其语法一般为:       s ...