JSON.toJSONString中序列化空字符串遇到的坑
前言
最近在做系统Bug修复时遇到了一个问题,调用其他服务时传递的参数和自己预先的不一致,例如Map中有10条记录,然后使用JSON.toJSONString 包装后进行网络传递,但是通过调试发现接收方只收到了5条数据。经过追溯发现原来JSON.toJSONString 这里有坑。所以现在总结记录一下。
FastJson简介
首先,介绍一下fastjson。fastjson是由alibaba开源的一套json处理器。与其他json处理器(如Gson,Jackson等)和其他的Java对象序列化反序列化方式相比,有比较明显的性能优势。详情可以参考fastjson提供的benchmark。
https://github.com/eishay/jvm-serializers/wiki
采坑实例
上面已经说到我遇到问题的描述了,下面直接看代码实例: 

这里箭头指向的位置,因为sent-1 中的value为空,所以并未打印出来。 
第二个使用:JSON.toJSONString(map, SerializerFeature.WriteMapNullValue)  指定序列化方式就打印出来了。
所以大家使用的时候一定切记这里的坑。下面再看看fastJson一些默认一下属性:
JSON.toJSONString 源码:

然后看下SerializerFeature属性:
| 名称 | 含义 | 
| QuoteFieldNames | 输出key时是否使用双引号,默认为true | 
| UseSingleQuotes | 使用单引号而不是双引号,默认为false | 
| WriteMapNullValue | 是否输出值为null的字段,默认为false | 
| WriteEnumUsingToString | Enum输出name()或者original,默认为false | 
| SortField | 按字段名称排序后输出。默认为false | 
| WriteTabAsSpecial | 把\t做转义输出,默认为false | 
| PrettyForma | 结果是否格式化,默认为false | 
| WriteClassName | 序列化时写入类型信息,默认为false。反序列化是需用到 | 
| ...... | ...... | 
看到这里大家可以针对自己的需求选择不同序列化格式,更多SerializerFeature 请大家自行查阅。
JSON.toJSONString中序列化空字符串遇到的坑的更多相关文章
- C#中如何排除/过滤/清空/删除掉字符串数组中的空字符串
		
C#中要如何才能删除一个字符串数组中的空字符串呢?随着微软对C#不断发展和更新,C#中对于数组操作的方式也变得越来越多样化.以往要实现过滤数组中的空字符串,都是需要实行循环的方式来排除和过滤.C#3. ...
 - C# 使用lambda表达式过滤掉数组中的空字符串
		
使用lambda表达式过滤掉数组中的空字符串 KeyWord = KeyWord.Where(S => !string.IsNullOrEmpty(S)).ToArray();
 - 使用C#删除一个字符串数组中的空字符串
		
C#中要如何才能删除一个字符串数组中的空字符串呢?随着微软对C#不断发展和更新,C#中对于数组操作的方式也变得越来越多样化.以往要实现过滤数组中的空字符串,都是需要实行循环的方式来排除和过滤.C#3. ...
 - 07.C#中如何排除/过滤/清空/删除掉字符串数组中的空字符串
		
方式一:使用lambda表达式筛选过滤掉数组中空字符串 1 /// <summary> /// 使用lambda表达式排除/过滤/清空/删除掉字符串数组中的空字符串 /// ...
 - 编程经验点滴----在 Oracle 数据库中保存空字符串
		
写程序这么多年,近几天才发现,向 Oracle 数据库表中,保存空字符串 '' ,结果成了 null. 由于数据库数值 null 的比较.判断,与空字符串 '' 存在差异.一不留神,代码中留下了 bu ...
 - 指定JSON.toJSONString中实体类属性的输出顺序
		
最近在使用JSON.toJSONString过程中出现实体类的属性与转换之前的顺序不一致 public static void main(String[] args) { Person person ...
 - WPF在XAML的资源中定义空字符串String.Empty
		
代码如下: <!--1. 首先引用System的命名空间--> <Window x:Class="DriverEasyWPF.Views.DialogWindow" ...
 - JSON.toJSONString()null值转“”
		
public static void main(String[] s) { CybWmsCommoditiesVo cybWmsCommoditiesVo = new CybWmsCommoditie ...
 - javascript中数组和字符串的方法比较
		
× 目录 [1]可索引 [2]转换 [3]拼接[4]创建[5]位置 前面的话 字符串和数组有很多的相同之处,它们的方法众多,且相似度很高:但它们又有不同之处,字符串是不可变值,于是可以把其看作只读的数 ...
 
随机推荐
- python pdfplumber用于pdf表格提取
			
import pdfplumber with pdfplumber.open('test.pdf') as pdf: #page_count = len(pdf.pages()) p0 = pdf.p ...
 - VB 求余求整
			
可以直接用函数来实现: 1.用CInt()函数的范围在-32,768 至 32,767,对于小数部分四舍五入 . 2.用Int()函数和Fix()函数都会删除参数的小数部份而返回剩下的整数, 不同之处 ...
 - sell 项目  订单表 设计 及 创建
			
1.数据库设计 2.订单表 创建 /** * 订单表 */ create table `order_master` ( `order_id` varchar(32) not null, `buyer_ ...
 - 在vim中安装及配置NERDTree插件
			
使用Vundle插件安装,在.vimrc中加入以下代码: Plugin 'scrooloose/nerdtree' 打开vim,输入命令如下: :BundleInstall 等待安装完毕 配置NERD ...
 - C++ 的 runtime exception是没有扩展性的
			
https://groups.google.com/forum/#!topic/seastar-dev/RuK-OajeqHk https://www.google.com/search?ei=gTH ...
 - 【laravel5.4】php artisan 常用命令
			
路由缓存:/www/wd***/php/bin/php artisan route:cache 查看全部路由并输出到txt文件:/www/wd***/php/bin/php artisan r ...
 - SqlServer整库备份还原脚本
			
最近领导要求定时备份数据库(不是我的作业), 搜了一下资料还不少, 先mark一下, 得空再验证吧!!! 以下内容为转载 转自:https://www.cnblogs.com/want990/p/74 ...
 - oracle安装后listener.ora文件
			
# listener.ora Network Configuration File: D:\Develop\oracle11g\product\11.2.0\dbhome_1\network\admi ...
 - Java实现多线程的四种实现方式
			
以计算0到1000之间的和为例 import java.util.ArrayList; import java.util.LinkedList; import java.util.List; impo ...
 - 第一次使用Mac
			
Mac禁用掉默认输入法 搜狗输入法已经包含中文.英文输入法了,其余输入法可以删除掉.按ctrol键的时候本来应该是搜狗输入法中英文切换,结果却是搜狗输入法和ABC输入法之间互相切换. 打开键盘偏好设置 ...