gson 生成的json字符串带u003c,u003d,u003e的解决方案(gson将实体类转json)

摘要:
netJson执行结果如下:4.拓展使用Gson将实体类转json字符串,其实有两种方式。除了使用GsonBuilder外,还可以使用Gson实现使用这种方式,也同样存在着被乱编码的情况。2020-12-23当想对json字符串进行格式化时,需要先将json字符串转json对象,再用GsonBuilder进行格式化。

1.情景展示

gson 生成的json字符串带u003c,u003d,u003e的解决方案(gson将实体类转json)第1张

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

如何解决这个问题?

2.原因分析

错误方式一:使用replaceAll()

gson 生成的json字符串带u003c,u003d,u003e的解决方案(gson将实体类转json)第2张

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

gson 生成的json字符串带u003c,u003d,u003e的解决方案(gson将实体类转json)第3张

3.解决方案

方式一:使用js解码

// 实例化对象并赋值
Result result = new Result().setCode("200").setFormat("PDF").setMessage("<Name>Mary=don</Name>");
// 实体类转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();
}

gson 生成的json字符串带u003c,u003d,u003e的解决方案(gson将实体类转json)第4张

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

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

// 实例化对象并赋值
Result result = new Result().setCode("200").setFormat("PDF").setMessage("<Name>Mary=don</Name>");
// 实体类转json字符串(禁止编码)
String gsonStr = new GsonBuilder().disableHtmlEscaping().create().toJson(result);
System.out.println(gsonStr);

gson 生成的json字符串带u003c,u003d,u003e的解决方案(gson将实体类转json)第4张

方式三:转json对象

// 实例化对象并赋值
Result result = new Result().setCode("200").setFormat("PDF").setMessage("<Name>Mary=don</Name>");
// 实体类转json字符串
String gsonStr = new GsonBuilder().create().toJson(result);
com.alibaba.fastjson.JSONObject aliJSON = JSONObject.parseObject(gsonStr);
System.out.println(aliJSON);

gson 生成的json字符串带u003c,u003d,u003e的解决方案(gson将实体类转json)第6张

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

netJson执行结果如下:

gson 生成的json字符串带u003c,u003d,u003e的解决方案(gson将实体类转json)第7张

4.拓展

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

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

gson 生成的json字符串带u003c,u003d,u003e的解决方案(gson将实体类转json)第8张

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

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

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

// 实例化对象并赋值
Result result = new Result().setCode("200").setFormat("PDF").setMessage("<Name>Mary=don</Name>");
GsonBuilder gsonBuilder = new GsonBuilder();
// 美化输出(这里是格式化的关键)
gsonBuilder.setPrettyPrinting();
// 实体类转json字符串(禁止编码)
String gsonStr = gsonBuilder.disableHtmlEscaping().create().toJson(result);
System.out.println(gsonStr);

gson 生成的json字符串带u003c,u003d,u003e的解决方案(gson将实体类转json)第9张

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

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

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

2020-12-23

当想对json字符串进行格式化时,需要先将json字符串转json对象,再用GsonBuilder进行格式化。

gson 生成的json字符串带u003c,u003d,u003e的解决方案(gson将实体类转json)第10张

写在最后

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

相关推荐:

免责声明:文章转载自《gson 生成的json字符串带u003c,u003d,u003e的解决方案(gson将实体类转json)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇matlab 工具函数(一) —— 添加指定 SNR 的噪声git config配置下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

xml转json和实体类的两种方式

本文为博主原创,未经允许不得转载: xml在http通信中具有较高的安全性和传输速度,所以应用比较广泛, 在项目中往往需要对xml,json和实体类进行相互转换,在这里总结一下自己所用到的一些方法: 一. 使用XMLSerializer 将xml转为json格式 1.引入jar包: <dependency> <g...

Swagger学习笔记

查看swagger教学视频,请点击 《狂神说java》: https://www.bilibili.com/video/BV1Y441197Lw?p=1 记得投币三连呀~~ Swagger 学习目标: 了解Swagger的作用和概念 了解前后端分离 在SpringBoot中继承Swagger Swagger简介 前后端分离 Vue + SpringBo...

iOS开发之使用Runtime给Model类赋值

  本篇博客算是给网络缓存打个基础吧,本篇博客先给出简单也是最容易使用的把字典转成实体类的方法,然后在给出如何使用Runtime来给Model实体类赋值。本篇博客会介绍一部分,主要是字典的key与Model的属性名相同时,使用Runtime来进行赋值,下篇博客会给出字典key的值和Model的名字不同时的解决方案,并给出使用Runtime打印实体类属性值的...

关于Spring的@RequestBody的使用

一、基础知识介绍 @RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的);GET方式无请求体,所以使用@RequestBody接收数据时,前端不能使用GET方式提交数据,而是用POST方式进行提交。 在后端的同一个接收方法里,@RequestBody与@RequestParam()可以同时使用,@RequestBo...

Jackson jsonToBean 忽略 Bean中不存在属性的匹配。objectMapper FAIL_ON_UNKNOWN_PROPERTIES

1. jsonToBean时,json中有的字段,bean中没有 无法匹配时,忽略此字段,不抛出异常(默认是抛出异常的) 方案一(局部):在class上加 @JsonIgnoreProperties(ignoreUnknown = true) public classtes...

写一个工具生成数据库实体类

写一个java工具从数据库生成实体类 开始写之前的说明 ​ 这只是一个简单的解析数据库建表语句之后,根据解析结果生成java文件的一个简单工具。写的原因有两个。 ​ 1:项目中没有人写实体类的注释,字段的注释,现有的工具也没法根据数据库的注释自动添加到class文件上。 ​ 2:自己写一个也似乎不是很难。 ​ 所以就自己写了一个。 这里在生成java文件的...