昨天在工作中遇到一个一个需要解析json字符串的问题,以前也遇到过,然后也解决了;突然这次就不行了,然后一直在网上找资料。然后一直也没有解决的方案;花了我一下午的时间,就有些难受了;
com.alibaba.fastjson.JSONObject cannot be cast toJSONArray
之前一直报这个错误,怎么改都不行
解析代码
JSONObject welfare = JSONObject.parseObject(one.getWelfare());
JSONArray luckDraw = welfare.getJSONArray("PAGEANT");
if (luckDraw != null && !luckDraw.isEmpty()) {
List<ActivityTime> actPrizeList = new ArrayList<>();
luckDraw.forEach(luck -> {
JSONObject luckInfo = (JSONObject) luck;
ActivityTime actPrize = luckInfo.toJavaObject(ActivityTime.class);
actPrizeList.add(actPrize);
});
one.setActPrizeList(actPrizeList);
}
需要解析从数据库查询来说json字符串为
{"PAGEANT":{"JOIN_END_DATE":"2020-3-25 00:00:00","VOTE_END_DATE":"2020-3-25 10:00:00","JOIN_START_DATE":"2020-3-25 00:00:00","VOTE_START_DATE":"2020-3-25 10:00:00"]}
怎么弄也解决不了,然后第二天继续找解决方案
JSONObject welfare = JSONObject.parseObject(one.getWelfare());
List<ActivityTime> pageant = JSON.parseArray(welfare.getString("PAGEANT"), ActivityTime.class);
System.out.println(pageant.size());
System.out.println(pageant.get(0));
然后我换了一种解决方案
报错类型终于不同了,瞬间就感觉松了口气
报错信息为 :
com.alibaba.fastjson.JSONException: exepct '[', but {, type : class
虽然报错了,当终归有提示信息;
这个意思就是:想要是的“【】”我给的却是“{}”这就是初始传值的问题了;然后我看了下数据库,果然是格式错了,应该改成这个样子:
{"PAGEANT":[{"JOIN_END_DATE":"2020-3-25 00:00:00","VOTE_END_DATE":"2020-3-25 10:00:00","JOIN_START_DATE":"2020-3-25 00:00:00","VOTE_START_DATE":"2020-3-25 10:00:00"}]}
少了个“【】”之后就解决了,记录下这个坑,继续改下个bug