FastJson、Jackson、Gson进行Java对象转换Json
- 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的更多相关文章
- FastJson、Jackson、Gson进行Java对象转换Json细节处理
前言 Java对象在转json的时候,如果对象里面有属性值为null的话,那么在json序列化的时候要不要序列出来呢?对比以下json转换方式 一.fastJson 1.fastJson在转换java ...
- FastJson、Jackson、Gson进行Java对象转换Json的细节处理
前言 Java对象在转json的时候,如果对象里面有属性值为null的话,那么在json序列化的时候要不要序列出来呢?对比以下json转换方式 一.fastJson 1.fastJson在转换java ...
- GSON中Java对象与JSON互相转换——(一)
json的转换插件是通过java的一些工具,直接将java对象或集合转换成json字符串. 常用的json转换工具有如下几种: 1)jsonlib 2)Gson:google 3)fastjson:阿 ...
- Java对象转换Json的细节处理
一.fastJson 1.fastJson在转换java对象为json的时候,默认是不序列化null值对应的key的 也就是说当对象里面的属性为空的时候,在转换成json时,不序列化那些为null值的 ...
- 使用Jackson来实现Java对象与JSON的相互转换的教程
一.入门Jackson中有个ObjectMapper类很是实用,用于Java对象与JSON的互换.1.JAVA对象转JSON[JSON序列化] 1 2 3 4 5 6 7 8 9 10 11 12 1 ...
- JAVA对象转换JSON
1. 把java 对象列表转换为json对象数组,并转为字符串 复制代码 代码如下: JSONArray array = JSONArray.fromObject(userlist); String ...
- JackSon将java对象转换为JSON字符串
JackSon可以将java对象转换为JSON字符串,步骤如下: 1.导入JackSon 的jar包 2.创建ObjectMapper对象 3.使用ObjectMapper对象的writeValueA ...
- (后端)JackSon将java对象转换为JSON字符串(转)
转载小金金金丶园友: JackSon可以将java对象转换为JSON字符串,步骤如下: 1.导入JackSon 的jar包 2.创建ObjectMapper对象 3.使用ObjectMapper对象的 ...
- json相关类库,java对象与json相互转换
有效选择七个关于Java的JSON开源类库 转自:http://www.open-open.com/lib/view/open1397870197828.html 翻译: (英语原文:http://w ...
- Java对象、Json、Xml转换工具Jackson使用
在Java项目中將一个对象转换成一段Json格式的字符串是非常常见的,能够实现这种需求的工具包也比较多,例如Gson.JSON-lib.Jackson等等.本文主要介绍Jackson的使用,Jacks ...
随机推荐
- Linux:通过命令查找日志文件中的某字段
工作中有用到,做个记录. 1. 查询某字段,显示行号: cat -n file_name|grep '查找字段' [root@ZWZF-CWY-LZY-12 CWY]# cat -n nohup.ou ...
- buu-(ACTF新生赛2020)usualCrypt
base64的常用套路了 文件直接给base,我大胆盲猜base64: 先进sub-401080函数康康: 先看byte-40e0a0 这个很明显了,然后看上面的函数 进这连个地址发现是base64加 ...
- 介绍 SafeCoder 解决方案服务
今天这篇推文,我们打算给自己打一波"广告",向大家隆重介绍 SafeCoder-- 一款专为企业打造的代码助手解决方案. SafeCoder 旨在成为你完全合规且自托管的结对编程工 ...
- 详细讲解js实现电梯导航
场景 对于某一个页面内容繁多, 如果我们滚动的时间较长,为了增加用户体验. 我们需要实现点击某一个按钮,然后滚动到对应的区域. 滚动的时候,右侧对应的分类实现高亮 其实,这个功能就2个步骤: 1.点击 ...
- 代码随想录算法训练营第二十五天| 216.组合总和III 17.电话号码的字母组合
216.组合总和III 卡哥建议:如果把 组合问题理解了,本题就容易一些了. 题目链接/文章讲解:https://programmercarl.com/0216.%E7%BB%84%E5%90%8 ...
- 运行解压版tomcat中的startup.bat一闪而退的解决办法
Tomcat的startup.bat,它调用了catalina.bat,而catalina.bat则调用了setclasspath.bat,只要在setclasspath.bat的开头声明环境变量(红 ...
- HTML一键打包IPA(苹果IOS应用)工具 网站打包 APP
工具简介 HTML一键打包IPA(苹果应用)工具可以把本地HTML项目或者网站打包为一个苹果应用IPA文件,无需编写任何代码,支持在苹果设备上安装运行. 该软件已经被GDB苹果网页一键打包工具取代,详 ...
- 如何成功将 API 客户的 transformer 模型推理速度加快 100 倍
Transformers 已成为世界各地数据科学家用以探索最先进 NLP 模型.构建新 NLP 模块的默认库.它拥有超过 5000 个预训练和微调的模型,支持 250 多种语言,任君取用.无论你使用哪 ...
- 文心一言 VS 讯飞星火 VS chatgpt (107)-- 算法导论10.1 5题
五.用go语言,栈插入和删除元素只能在同一端进行,队列的插入操作和删除操作分别在两端进行,与它们不同的,有一种双端队列(deque),其插入和删除操作都可以在两端进行.写出4个时间均为 O(1)的过程 ...
- Python面试题——网络与并发编程
1.python的底层网络交互模块有哪些? socket, urllib,urllib3 , requests, grab, pycurl 2.简述OSI七层协议. OSI七层协议是一个用于计算机或通 ...