如上图所示,这一个标准的json字符串,双引号需要使用反斜杠进行转义,
一般情况下,我们是用不到这种json字符串的,在java中,json字符串的通常表现形式是这种:

其本质还是json对象,并不是真正意义上的json字符串(即使将json对象转字符串),哪里会用到上面那种带转义符的json字符串?(下面示例)
完整请求参数:

后台用实体类接收,且Person用的是字符串String来接收的

一般情况下,是不会出现这种变态需求的,明明是json对象,却用字符串接收,我们通常通过java后台发送http请求时,往往传送的数据格式是这样的:

而我们一旦使用这种标准的json数据格式发送请求,对方服务器在接收到数据后往Person里塞数据时,将会报错:大致信息是-需要的是字符串,提供的却是json对象。
↓↓↓如果是想在json对象里嵌套json字符串,直接看最后↓↓↓
如何生成这种格式的数据?
准备工作:
JSON对象常用的有两种:一种是net.sf.json.JSONObject,另一种是com.alibaba.fastjson.JSONObect
错误示例一:调用原生的toString()方法

这是java形式的json字符串,无论是net的toString()还是ali的toString()、toJSONString()方法,里面存的还是对象,并不是我们想要的结果
错误示例二:使用FackJson
import com.fasterxml.jacks on.core.io.JsonStringEncoder;

这种是javascript形式的json字符串,虽然离目标近了,但还是不是我们想要的结果
错误示例三:使用StringEscapeUtils
import org.apache.commons.lang.StringEscapeUtils

还是不行,生成的也是JavaScript形式的json字符串
方式一:通过Jackson实现
所需jar包:
导入:
代码实现:
方式二:通过谷歌的Gson实现

所需jar包:
导包:
代码实现:
测试一:

上面的这两种方式,会在生成的json字符串两边加上双引号
测试二:
方式一:

方式二:

方式三:

方式四:Jackson核心包

如果是json对象嵌套json字符串,则上面4种方式都可以实现(但不一定能用,未测试)。
已知这种数据

需要转成这种数据

2021-06-11
我发现了一个诡异的情况,那就是:
Map转Json,当Map的Value带有闭合标签时,转化成json后,会被强制添加转义符"",一起来看下:
使用net.sf.json将map转json
被强制添加了转义符

解决办法:
使用com.alibaba.fastjson

哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!
- 个人主页
- java JSON
- Java 实体类转json对象,属性名转key后首字母强制被转成小写的解决方案
- json,fastjson,Jackson,Gson区别对比

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/176757.html