空格、NBSP 造成的 JSON 解析失败问题

29 篇文章 0 订阅
3 篇文章 0 订阅

一、问题

今天编辑腾讯文档,加了一个代码块,复制了一段 json 进去,后来产品到该文档里去取这个 json,使用小米推送进行推送,发现推送死活显示不出来,可是之前测试的时候明明是好的,对比了之前的 json 和腾讯文档里的 json,乍看之下没什么区别,研究了很久,才发现问题所在。

就是这两个:

腾讯文档(以下称副本):{ "a":""}
txt文件(以下称原件):{ "a": ""}

看起来一模一样,在 sublime Text 中选中它们,就会发现一点异常,一个的空格2个点,一个是4个点:

在这里插入图片描述
再看下它们的 unicode 表示:

副本:{ "a":""}

\u007b\u00a0\u0020\u00a0\u0020\u0022\u0061\u0022\u003a\u0022\u0022\u007d

原件:{ "a":""}

\u007b\u0020\u0020\u0020\u0020\u0022\u0061\u0022\u003a\u0022\u0022\u007d

为了方便观察,我把它们都列出来:
(unicode 对照表可查看这里

在这里插入图片描述

可以看到,它们的区别在于 { 后面的空格,副本 json 是 \u00a0\u0020 交替,原件都是 \u0020

\u00a0 代表 NBSP,\u0020 代表空格。它们有什么区别呢?

二、空格与 NBSP

空格,就是普通的空格。

NBSP,即 Non-breaking space,不间断空格。它是一个连接符,通常用在 Word 中,使多个单词组成的词组不被换行间断,即让这个词组都显示在一行。

如“微信”是一个词组,在 Word 中,可能会出现这样的情形,“微信”被分成了两行,看起来会有一点困扰。

在这里插入图片描述

如果给“信”前面加一个 NBSP(通过 ctrl + shift + space 添加),就会变成这样,“微信”都显示在第二行。

在这里插入图片描述

三、解决

经测试,腾讯文档会把两个空格(即\u0020\u0020),转为一个 NBSP 和一个空格(即\u00a0\u0020)。

怎么解决呢?

  • 可以把 json 复制到 ide 中,ide 的字符串是带样式的,腾讯文档不会修改空格。

  • 如果使用 Sublime Text 的 Pretty JSON 来格式化 JSON 的话,格式化后默认缩进是 2 个空格,这时复制到腾讯文档就会有问题,可以修改一个 Pretty JSON 的配置,改为使用 tab 来缩进,这样复制也不会有问题。

修改方法:
打开 Preferences-Package Settings-Pretty JSON-Settings-Defalut:

在这里插入图片描述

将 “indent” 的值改为 ‘\t’:

在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Java中获取请求体的JSON解析JSON对象时出现了参数含有空格和乱码的问题。出现这个问题可能是由于请求体JSON中的参数值中含有空格或者非UTF-8编码导致的。 要解决这个问题,首先需要检查并确认请求体JSON中的参数值是否正确且符合JSON格式的规范。如果参数值含有空格或其他特殊字符,建议在发送请求时对参数值进行URL编码,确保其在传输过程中不会出现乱码。 在Java代码中,可以使用URLDecoder对请求体JSON进行解码。例如,可以使用如下代码获取请求体中的JSON字符串,并进行解码: String body = request.getReader().lines().collect(Collectors.joining(System.lineSeparator())); String decodedBody = URLDecoder.decode(body, "UTF-8"); 接下来,可以使用JSON库(如Jackson、Gson等)将解码后的JSON字符串解析JSON对象。例如,对于使用Jackson库的情况,可以使用如下代码将解码后的JSON字符串解析JSON对象: ObjectMapper mapper = new ObjectMapper(); JsonNode jsonNode = mapper.readTree(decodedBody); 在解析JSON对象之后,可以通过遍历JSON对象的属性、调用对应的getter方法等获取具体的参数值,进行后续的业务逻辑处理。 综上所述,要解决Java获取请求体JSON解析JSON对象参数含有空格乱码的问题,需要注意参数值的格式以及编码方式,并在Java代码中正确解码和解析JSON对象。希望对你有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值