json 特殊字符处理问题

特殊字符处理问题

在从第三方接过来的数据中总会有一些奇奇怪怪的字符,而现在数据的传输很多都采用的json格式,对特殊字符的处理,还有生僻字的处理是我们在处理报文中必须要面对的问题,选择一个好的处理库可以减少很多麻烦事。

JSON串和Object常见转换方式

五种常见的处理方式。

Json-Lib

<!-- https://mvnrepository.com/artifact/net.sf.json-lib/json-lib -->
<dependency>
    <groupId>net.sf.json-lib</groupId>
    <artifactId>json-lib</artifactId>
    <version>2.4</version>
</dependency>

Org.Json

<!-- https://mvnrepository.com/artifact/org.json/json -->
<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20200518</version>
</dependency>

Jackson

<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.12.0-rc1</version>
</dependency>

Fastjson

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.73</version>
</dependency>

Gson

<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.6</version>
</dependency>

fastjson不支持unicode

在系统间通讯传输的时候现在普遍是json的格式,阿里的fastjson应该是用的比较多的,这回是碰上了unicode的特殊字符。fastjson的处理是将其转义,成为 \u…
这样在传输到其他系统的时候就转义不回来了,串里判断不出来对应的转义字符。但是直接给过滤也不行啊,unicode那么多,不能都把特殊字符给过滤一遍吧

fastjson给转义后的字符串:
在这里插入图片描述

unicode 字符集查看
https://www.qqxiuzi.cn/zh/unicode-zifu.php

最终处理

换成Gson了

Gson gson = new Gson();
System.out.println(gson.toJson(map));

原样传送,不带更改

序列化null值问题

json转换方式中默认都不会对null值进行处理,即为null的对象序列化一下就没有对应的key了。

fastjson

JSON.toJSONString(Object object, SerializerFeature.WriteMapNullValue)

其他null值的参数

QuoteFieldNames———-输出key时是否使用双引号,默认为true
WriteMapNullValue——–是否输出值为null的字段,默认为false
WriteNullNumberAsZero—-数值字段如果为null,输出为0,而非null
WriteNullListAsEmpty—–List字段如果为null,输出为[],而非null
WriteNullStringAsEmpty—字符类型字段如果为null,输出为"",而非null
WriteNullBooleanAsFalse–Boolean字段如果为null,输出为false,而非null

Gson

Gson gson = new GsonBuilder()
        .serializeNulls()
        .create();
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

忙碌的菠萝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值