fastjson2 icon indicating copy to clipboard operation
fastjson2 copied to clipboard

[BUG] JSONObject.getObject获取List类型数据时获取的数据为无数据空对象

Open LoftyKumo opened this issue 2 years ago • 2 comments

问题描述

使用jsonObject.getObject("key", List.class)时, 获取到的List中的元素均为无数据空对象

环境信息

  • OS信息: macOS 10.13.6
  • JDK信息:JDK 11.0.2
  • 版本信息:2.0.9

重现步骤

使用如下代码进行测试 Map<String, Object> map = null; List<Object> objects = Lists.newArrayList(); for (int i = 0; i < 10; i++) { map = Maps.newHashMap(); map.put("cursor", i); map.put("msg", "11111"); objects.add(map); } JSONObject jsonObject = new JSONObject(); jsonObject.put("data", objects); List data = jsonObject.getObject("data", List.class); System.out.println(JSONObject.toJSONString(data));

期待的正确结果

控制台打印的List数组为含有10个全部有数据元素的List

相关日志输出

控制台打印的data信息: [{},{},{},{},{},{},{},{},{},{}]

附加信息

https://github.com/alibaba/fastjson2/issues/536 之前的问题已修复, 这个问题是使用2.0.9版本验证产生的新问题

LoftyKumo avatar Jul 11 '22 01:07 LoftyKumo

fastjson1.x JSONObject getObject(String key, Class<T> clazz) image 调试后发现,fastjson并没有解析,直接返回的 image 比较引用结果返回true

fastjson2.x JSONObject getObject(String key, Class<T> type, JSONReader.Feature... features) image ObjectReaderImplList中item的解析问题,item的Type为java.lang.Object,因此没解析出来 image

综上,建议题主:既然明确List中的元素类型(Map),直接采用这种写法 fastjson2.x下 List data = jsonObject.getList("data", Map.class);

以上如有错误的地方,欢迎大家指正,谢谢

Zhuoyuan1 avatar Jul 11 '22 08:07 Zhuoyuan1

fastjson1.x JSONObject getObject(String key, Class<T> clazz) image 调试后发现,fastjson并没有解析,直接返回的 image 比较引用结果返回true

fastjson2.x JSONObject getObject(String key, Class<T> type, JSONReader.Feature... features) image ObjectReaderImplList中item的解析问题,item的Type为java.lang.Object,因此没解析出来 image

综上,建议题主:既然明确List中的元素类型(Map),直接采用这种写法 fastjson2.x下 List data = jsonObject.getList("data", Map.class);

以上如有错误的地方,欢迎大家指正,谢谢

我们是在fastjson1 升级至fastjson2中发现的这个问题, 目前已通过按JSONArray获取的方式解决, 之前我们的思路是尽量减少api变动做到fastjson1到fastjson2的平滑升级 因而提出的这个问题. 感谢您的建议

LoftyKumo avatar Jul 11 '22 08:07 LoftyKumo

https://oss.sonatype.org/content/repositories/snapshots/com/alibaba/fastjson2/fastjson2/2.0.13.android-SNAPSHOT/ 问题已经修复,请用2.0.13.android-SNAPSHOT帮忙验证,2.0.13版本预计在9月12日前发布

wenshao avatar Aug 31 '22 12:08 wenshao

https://github.com/alibaba/fastjson2/releases/tag/2.0.13 2.0.13版本已经发布,请用帮忙用新版本验证

wenshao avatar Sep 10 '22 07:09 wenshao