1.情景展示

如上图所示,使用谷歌的Gson将实体类转json字符串,如果实体类的属性值,出现大于号、小于号、等号等符号时,调用GsonBuilder进行转换时,这些符号会被强制转换成unicode编码。

如何解决这个问题?

2.原因分析

错误方式一:使用replaceAll()

错误方式二:使用iso-8859-1解码

3.解决方案

方式一:使用js解码

// 实例化对象并赋值

Result result = new Result().setCode("200").setFormat("PDF").setMessage("Mary=don");

// 实体类转json字符串

String gsonStr = new GsonBuilder().create().toJson(result);

ScriptEngine engine = new ScriptEngineManager().getEngineByExtension("js");

String unUrl = "";

try {

unUrl = (String)engine.eval("unescape(‘"+gsonStr+"‘)");

System.out.println(unUrl);

} catch (ScriptException e) {

e.printStackTrace();

}

虽然这种方式可以实现解码,但不推荐使用。

方式二:禁用html编码(推荐使用)

// 实例化对象并赋值

Result result = new Result().setCode("200").setFormat("PDF").setMessage("Mary=don");

// 实体类转json字符串(禁止编码)

String gsonStr = new GsonBuilder().disableHtmlEscaping().create().toJson(result);

System.out.println(gsonStr);

方式三:转json对象

// 实例化对象并赋值

Result result = new Result().setCode("200").setFormat("PDF").setMessage("Mary=don");

// 实体类转json字符串

String gsonStr = new GsonBuilder().create().toJson(result);

com.alibaba.fastjson.JSONObject aliJSON = JSONObject.parseObject(gsonStr);

System.out.println(aliJSON);

注意:必须使用阿里的json,不能使用net的json。

netJson执行结果如下:

4.拓展

使用Gson将实体类转json字符串,其实有两种方式。

除了使用GsonBuilder外,还可以使用Gson实现

使用这种方式,也同样存在着被乱编码的情况。

使用GsonBuilder转json,还有一个功能就是:可以格式化json字符串。

我们知道,在Java中,不管是json对象还是字符串,打印到控制台上的数据,始终只显示在一行上,无法进行格式化。

// 实例化对象并赋值

Result result = new Result().setCode("200").setFormat("PDF").setMessage("Mary=don");

GsonBuilder gsonBuilder = new GsonBuilder();

// 美化输出(这里是格式化的关键)

gsonBuilder.setPrettyPrinting();

// 实体类转json字符串(禁止编码)

String gsonStr = gsonBuilder.disableHtmlEscaping().create().toJson(result);

System.out.println(gsonStr);

这样,在实际开发调试过程中,当控制台出现一大坨json字符串时,我们再也不用将其单独复制出来,再格式化进行查看啦。

综上所述,使用GsonBuilder比Gson功能更加强大。

另外,使用谷歌的Gson转json字符串还有一个好处就是:不用担心当属性名称不是标准的驼峰命名法(比如上面:首字母是大写)时,转换出来的key名称和属性名称不完全一致的问题。

写在最后

哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

相关推荐:

java 字符串4%3e=3,gson 生成的json字符串带\u003c,\u003d,\u003e的解决方案相关推荐

  1. Gson().fromJson将json字符串转成对象时,执行非常慢,原因可能是版本的问题

    Gson().fromJson将json字符串转成对象时,执行非常慢,原因可能是版本的问题 1.将1.3的版本升级成1.7的,转换速度就非常快了 附: json数据大小

  2. Java(24):GSON - JsonParser将 JSON 字符串解析为 Java 对象的树结构

    GSONJsonParser类可以将 JSON 字符串或流解析为 Java 对象的树结构. 解析过程中会用到:JsonParse,JsonElement,还有 JsonObject 和 JsonArr ...

  3. gson读取json字符串_Java:JSON(Gson)从JSON字符串获取值

    您可以将它解析为一个有很好文档记录的对象.但是如果您不想围绕某些响应构建一个完整的对象框架,那么可以使用它们的泛型JsonArray和{}类来遍历json字符串.在// this is just yo ...

  4. Gson 实体转Json字符串 --- 报declares multiple JSON fields named XXX解决方法

    前言 很是气愤,将一个对象转json字符串,一直报declares multiple JSON fields named passengers.调试了很久,都没找到原因.就这样,一下午又过去了..加班 ...

  5. php将字符串转成json字符串数组,php数组怎么转成json字符串

    在PHP中,可以使用json_encode()函数来将数组转化为json字符串,语法"json_encode(数组)".json_encode()函数可以对变量进行JSON编码,将 ...

  6. json字符串导入oracle,如何在Oracle中将JSON字符串转换为JSON

    我需要在Oracle查询中将JSON字符串转换为JSON. 示例字符串: {"1":{"qid":1,"aid":1,"a&quo ...

  7. 生成24位字符串ID__IdGenerator.java

    此工具类用于生成24位字符串ID,唯一不重复. 直接通过 IdGenerator.get() 获取. 源码如下:(点击下载源码 - IdGenerator.java ) 1 import java.n ...

  8. JSON字符串在Java和JavaScript中的解析和转换

    JSON字符串在Java和JS种的转换 1. JSON字符串格式 2. JSON 在 Java 中的转换 2.1 FastJSON 使用 2.2 Jackson 使用 2.3 Gson 使用 2.4 ...

  9. c#谷歌 json转对象_利用Google Gson实现JSON字符串和对象之间相互转换

    最近一个项目需要用到JSON,需要在JSON字符串和对象之间相互转换,在网上找了些资料,发现google的Gson还是比较不错的. 废话不说,下面是简单的例子: 先上源码:下载(包含jar包) Per ...

  10. jsp java json解析,jsp中获取json字符串,并解析

    JqueryDemo1 function showData() { var str='{ "name": "John" }';//json标准格式 var ob ...

最新文章

  1. windows如何安装python-手把手教你如何在windows系统安装python?
  2. 《从零开始学Swift》学习笔记(Day 16)——字典集合
  3. 又烧一辆!蔚来ES8车库夜里起火 两个半小时才熄灭:现场惨烈
  4. 一个ContentProvider的典型结构分析
  5. oracle高效分页存储过程(百万数据级)
  6. openwrt下ipk生成过程及原理
  7. Open Inventor Coin3D
  8. 电子绘本pdf_1100多本RAZ(Reading A-Z),电子点读版PDF有声书,最全版本
  9. centos yum安装tracert_centos6.3如何打开tracert
  10. 华为的冬天 任正非
  11. python最好用的助手_让Python爬虫变成你的好助手
  12. MATLAB基础编程(004-01)在不同初速度和重力加速度下的的动态抛物运动绘图
  13. 收藏一个快要消亡的技术古董
  14. multithreading coding
  15. Python爬虫——爬取IEEE论文
  16. 深度学习程序原理基本
  17. DIY USB3.0 SM2246XT+双贴闪迪15131颗粒256G固态U盘
  18. 算命的也要懂代码了?这个开源项目从黄历到八字都算得清清楚楚
  19. 这个数据集同时记录了血糖值和PPG 数据, 试图用CNN找到他们之间的关联关系,尝试基于PPG的无创连续检测血糖!
  20. 四六级来源这些国外期刊杂志or网站

热门文章

  1. Java操作ES数据库进行分页https://blog.csdn.net/lom9357bye/article/details/64500638?utm_source=blogxgwz0
  2. 解决fidder一直报“The sever(XXX) presented a certificate that did not validate,....”
  3. UiPath 网页元素识别
  4. 杂记 - 0002 - 衣服 - 尺寸表与跳码
  5. 8、Java中XML表示衣服尺码信息的文档编写
  6. 情境领导者-第四章、选择合适的领导风格
  7. 博弈论(Game Theory)入门——完全信息静态博弈
  8. Python自动连接网络(自动登录网络准入系统)
  9. android 自定义锁屏api,如何设置Android锁屏图像
  10. Windows11安装Android子系统——使用篇