Json字符串中包含冒号(:),导致 Gson 解析出错,该怎么办

log4lgb 2021-01-26 10:05:02
我从服务端获取到 Json 字符串,在使用 Gson 转化为对象时出错,提示:


com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Unterminated object...


经过查找,发现是 Json 字符串中有一个 value 中含有冒号(:)

Json 如下(因为太长了,所以前后部分省略了):

省略。。。
{
"objectId": "bf3d3b24e95447d6866c342a39361588",
"imageId": "96bdfa7aaddd4b40848ddcf02266308c",
"sha1": "25031f31f939fe79bf60eddbf0cd37e41929501f",
"fileCategory": "e55ec864ba2344cea3dcafc2781e3fe5",
"originalFileName": "9c77a79c4ef643f3ab386cfee59f64c6_https:www.lgstatic.comiimageM008FDCCgqCHmAJKSSAezOCAAQlPl9R-Rw735.JPG",
"sourceFileName": "895e48fa61b24573b8cb2f177d52570a_1611496313610.JPG",
"coverFileName": "d35d3357e17e46a4a205cc930fbdc693_1611496313611.JPG",
"thumbnailFileName": "c8b80504c5ab4e84a8e3b73e1982dcae_1611496313611.JPG",
"createTime": 1611412660000,
"imageUser": "84f6e0d8d94348ccab981e364661a419",
"imageStatus": 1
}
省略。。。

就是 key 是 originalFileName 的 value 导致的出错(...https:...),将冒号去掉就可以正常解析了,但又不能随便修改原始数据,请问这种情况该怎么办啊?
...全文
1367 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
疯狂熊猫人 2021-01-30
  • 打赏
  • 举报
回复
不知道你用的哪个版本的gson。我使用的2.8.6版本,并未出现你说的异常

Gson gson = new GsonBuilder().create();
String content = "{\"originalFileName\":\"9c77a79c4ef643f3ab386cfee59f64c6_https:www.lgstatic.comiimageM008FDCCgqCHmAJKSSAezOCAAQlPl9R-Rw735.JPG\"}";
Map map = gson.fromJson(content, Map.class);
System.out.println(map);
//输出的结果为{originalFileName=9c77a79c4ef643f3ab386cfee59f64c6_https:www.lgstatic.comiimageM008FDCCgqCHmAJKSSAezOCAAQlPl9R-Rw735.JPG}
//说明已成功将json字符串反序列化为Map了
如果你能够控制数据的入口,那么,要求对方将http地址进行urlencode或者转为Unicode之后再进行json序列化。
  • 打赏
  • 举报
回复
那就换一个啊
Vae 东 2021-01-27
  • 打赏
  • 举报
回复
换个JSON呗.必须要使用GSON嘛
啥都无所谓 2021-01-27
  • 打赏
  • 举报
回复
Gson 那就不用这个Gson 。换一个。那么多。随便换一个

51,411

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧