- 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. nginx反向代理常用基本配置

    http反向代理 http { ...     server {     listen 80;         location / {         proxy_pass http://192.1 ...

  2. RocketMQ Linux单机测试:简易快速部署指南及Dashboard控制台部署

    目录 简介 开始 下载 增加环境变量 修改启动文件jvm大小 修改rocketmq配置文件 启动 快速测试 关闭 Dashboard 下载Dashboard 已编译jar包网盘下载 启动命令 可能遇到 ...

  3. 记通过mysql数据库成功入侵到服务器内部的渗透实战

    1,在成功进入mysql到数据库之后,可以使用select user();命令,查看当前的用户,如果为root,则可以执行下一步操作.不为root,则需要通过其他方法提权. 2, 使用show var ...

  4. Redis专题-秒杀

    Redis专题-并发/秒杀 开局一张图,内容全靠"编". 昨天晚上在群友里看到有人在讨论库存并发的问题,看到这里我就决定写一篇关于redis秒杀的文章. 1.理论部分 我们看看一般 ...

  5. Redis系列21:缓存与数据库的数据一致性讨论

    Redis系列1:深刻理解高性能Redis的本质 Redis系列2:数据持久化提高可用性 Redis系列3:高可用之主从架构 Redis系列4:高可用之Sentinel(哨兵模式) Redis系列5: ...

  6. 避坑|在读取excel.xlsx文件中的内容时发现明明只有3行,但跑起来却认为有13行,导致有10行None,UI自动化测试代码空跑了10次;|UI自动化测试|数据驱动

    在读取excel.xlsx文件中的内容时发现明明只有3行,但跑起来却认为有13行,导致有10行None,UI自动化测试代码空跑了10次: 原因:excel.xlsx内容清除时用delete快捷键导致, ...

  7. Go运算操作符全解与实战:编写更高效的代码!

    本文全面探讨了Go语言中的各类运算操作符,从基础的数学和位运算到逻辑和特殊运算符.文章旨在深入解析每一种运算操作符的工作原理.应用场景和注意事项,以帮助开发者编写更高效.健壮和可读的Go代码. 简介 ...

  8. 4.Autofac依赖注入初使用

    前面几篇文章只是初步搭建项目结构,那到底能否运行呢?(能是肯定的啦) 毕竟咱都NetCore了,所以依赖注入要搞起来.专业的解释我就不多说了,很多博客文章说的很详细(其实是我忘了那些术语怎么讲). 按 ...

  9. 其它——ZeroRPC和SimpleXMLRPCServer

    文章目录 一 Python中RPC框架 二 SimpleXMLRPCServer使用 服务端 客户端 三 ZeroRPC使用 服务端 客户端 一 Python中RPC框架 自带的:SimpleXMLR ...

  10. 将python程序打包为exe可执行文件方法

    将py打包为exe文件需要依赖pyinstaller第三方库 -F:打包后只生成单个exe格式文件: -D:默认选项,创建一个目录,包含exe文件以及大量依赖文件: -c:默认选项,使用控制台(就是类 ...