字符串转换为List<String>时候抛出异常:com.alibaba.fastjson2.JSONException: TODO : s

前言:

一个字符串想要能够转换为 List,其本身必须是具备 List 属性的字符串。

问题现象:

项目中需要对第三方接口返回的字符串转换为 List,就想到了使用 fastjson 来处理。

代码如下:

Object obj = data.get(SignConstant.PERMISSIONS);
List<String> list = JSON.parseArray(obj .toString(), String.class);

本以为上述的代码可以轻松解决问题,不出意外还是出意外了,报错信息如下:

com.alibaba.fastjson2.JSONException: TODO : s
	at com.alibaba.fastjson2.reader.ObjectReaderImplObject.readObject(ObjectReaderImplObject.java:192)
	at com.alibaba.fastjson2.reader.ObjectReaderImplList.readObject(ObjectReaderImplList.java:435)
	at com.alibaba.fastjson.JSON.parseArray(JSON.java:500)

一看人都啥了,啥呀,这都啥呀。。。。。。
在这里插入图片描述

难道 fastjson 连一个字符串转 List 还搞不定,在我这个场景还真搞不定…没办法,报错了得想办法解决啊,查阅资料,有说 fastjson 版本问题,有说 fastjson 2.0 版本源码根本就没有实现 parseArray 这个方法,好家伙,看来遇到这种情况的还不在少数,但是好像跟我这情况都不太符合啊,甚至 GitHub 上关于该问题还有个 issue 打开着在,那看来就只能自己想办法解决了。

GitHub 字符串转换为 List issue 讨论区

这里提供两种解决方法,还下:

  • 方案一:判断对象是否是 list 类型,直接进行强转。
  • 方案二:把对象转换为 JSONString,然后再使用 fastjson 转换为 List。
//方案一
  Object obj = data.get(SignConstant.PERMISSIONS);
  if (obj instanceof List) {
      List<String> lsit = (List<String>) obj;
  }
  //方案二:
  List<String> lsit1 = JSON.parseObject(JSON.toJSONString(obj), List.class);
  List<String> lsit2 = JSON.parseObject(JSON.toJSONString(obj), new TypeReference<List<String>>() {
  });
  List<String> lsit3 = JSON.parseArray(JSON.toJSONString(obj), String.class);

obj.toString() 效果如下:
在这里插入图片描述

JSON.toJSONString(obj) 效果如下:
在这里插入图片描述

反思:

前面的错误代码中,不应该使用 obj.toString(),我这里的 obj 对象本质就是一个 List 对象,使用 obj.toString() 后,就完完全全变成了一个字符串了,再使用fastjson 转换为 List,这肯定是会出错的,因此我们只需要把对象转换为 JSONString,然后再使用 fastjson 转换为 List 即可。

如有错误的地方欢迎指出纠正。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值