- 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. 可实现自动驾驶的飞机大战(C++)

    PS:觉得可以的uu帮忙点个star啦,最近在找工作,希望star多一点能写到简历上 B站演示视频: 基于C++实现的可自动驾驶的飞机大战_单机游戏热门视频 (bilibili.com) Github ...

  2. Stable Diffusion基础:ControlNet之人体姿势控制

    在AI绘画中精确控制图片是一件比较困难的事情,不过随着 ControlNet 的诞生,这一问题得到了很大的缓解. 今天我就给大家分享一个使用Stable Diffusion WebUI + OpenP ...

  3. phpstudy搭建虚拟域名

    phpstudy搭建虚拟域名 先使用phpstudy搭建好对应的环境 打开phpstudy控制面板,点击 其他选项菜单,选择 站点域名管理 输入网站虚拟域名,比如我这里DVWA靶场,我就写 www.d ...

  4. C#结合OpenCVSharp4图片相似度识别

    OpenCVSharp4图片相似度识别 需求背景:需要计算两个图片的相似度,然后将相似的图片进行归纳 1. 图片相似度算法 由于我是CRUD后端仔,对图像处理没什么概念.因此网上调研了几种相似度算法分 ...

  5. JAVA-Springboot实践项目-用户注册

    Smiling & Weeping ----我本没喜欢的人, 见你的次数多了, 也就有了. 1.创建数据表 1.1.选中数据表: use store 1.2.创建t_user表: 2创建用户实 ...

  6. 【krpano】KRPano测试开发专用浏览器

    KRPano技术解密网站:http://www.krpano.tech 在开发KRPano项目时候,每次测试时均需要打开测试服务器,或者上传到空间中才能进行测试,十分不方便. 因此本站提供了免费的KR ...

  7. Solution -「CF 1477A」Nezzar and Board

    Description Link. $ n $ distinct integers $ x_1,x_2,\ldots,x_n $ are written on the board. Nezzar ca ...

  8. Solution -「洛谷 P4451」「国家集训队」整数的 lqp 拆分

    Description Link. 求 \[\sum\prod_{i=1}^{m}F_{a_{i}},(m>0,a_{1},\cdots a_{m}>0,\sum a_{i}=n) \] ...

  9. Games101现代计算机图形学入门 - 作业1~8 集合含提高项总结

    Github 地址 :Games101 作业总结 Games101 官网:Games101 - 现代图形学入门 记录 Games101 Homework 系列 1 ~ 8 及相关作业提高项 环境安装 ...

  10. lvm格式化挂载分区

    1.从物理磁盘创建lvm分区 物理磁盘 /dev/sdb 20G 2.使用fdisk工具创建lvm分区 3.修改默认的分区类型 4.查看新建的分区 5.创建物理卷pv 6.创建逻辑卷组vg,并查看详情 ...