欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

json 特殊字符处理问题

程序员文章站 2022-05-23 12:00:47
特殊字符处理问题在从第三方接过来的数据中总会有一些奇奇怪怪的字符,而现在数据的传输很多都采用的json格式,对特殊字符的处理,还有生僻字的处理是我们在处理报文中必须要面对的问题,选择一个好的处理库可以减少很多麻烦事。JSON串和Object常见转换方式五种常见的处理方式。Json-Lib

特殊字符处理问题

在从第三方接过来的数据中总会有一些奇奇怪怪的字符,而现在数据的传输很多都采用的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给转义后的字符串:
json 特殊字符处理问题

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();

本文地址:https://blog.csdn.net/qq_21271511/article/details/109642865