zoukankan      html  css  js  c++  java
  • 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 把 做转义输出,默认为false
    PrettyForma 结果是否格式化,默认为false
    WriteClassName 序列化时写入类型信息,默认为false。反序列化是需用到
    ...... ......

    看到这里大家可以针对自己的需求选择不同序列化格式,更多SerializerFeature 请大家自行查阅。

  • 相关阅读:
    Android studio关于点击事件后的页面跳转,选择完成后返回(onActivityResult)
    关于Android对话框简单实用方法总结
    Eclipse键盘输出文字,显示到屏幕上方法
    indexOf实际试用方法
    LiteOS裸机驱动移植01-以LED为例说明驱动移植
    LiteOS内核教程06-内存管理
    LiteOS内核教程05-互斥锁
    LiteOS内核教程04-信号量
    LiteOS内核教程03-任务管理
    LiteOS内核教程02-HelloWorld
  • 原文地址:https://www.cnblogs.com/wang-meng/p/33d93b7f748ba3cf5bd06a80f886f238.html
Copyright © 2011-2022 走看看