开发避坑指南(32):FastJSON异常JSONArray cannot be cast to JSONObject解决方案
错误信息
Exception in thread "main" java.lang.ClassCastException: com.alibaba.fastjson.JSONArray cannot be cast to com.alibaba.fastjson.JSONObjectat com.alibaba.fastjson.JSONObject.getJSONObject(JSONObject.java:114)at com.demo.utils.StringUtils.main(StringUtils.java:354)
异常代码
使用LISTAGG函数将多行数据合并为单行字符串,如下:
String str = "{\"status\":1,\"message\":\"查询完成\",\"data\":[{\"orderNo\":\"BCUJ0001\",\"goodsType\":\"1\"}]}";
JSONObject jsonObject = (JSONObject) JSONObject.parse(str);
String status = jsonObject.getString("status");
if("1".equals(status)) {String dataStr = JSON.toJSONString(jsonObject.getJSONObject("data"));List<RetVo> retVoList = (List<RetVo>) JSON.parseObject(dataStr, RetVo.class);
}
报错行:String dataStr = JSON.toJSONString(jsonObject.getJSONObject(“data”));
错误分析
接口返回的字符串中,data属性是一个数组,根据报错提示,是不能将数组转换为JSONObject对象的,所以报错了。
解决办法
使用JSON.parseArray解析data节点,代码如下:
String str = "{\"status\":1,\"message\":\"查询完成\",\"data\":[{\"orderNo\":\"BCUJ0001\",\"goodsType\":\"1\"}]}";
JSONObject jsonObject = (JSONObject) JSONObject.parse(str);
String status = jsonObject.getString("status");
if("1".equals(status)) {List<RetVo> retVoList = JSON.parseArray(jsonObject.getString("data"), RetVo.class);
}