Java读取JSON多字段报JSONObject转JSONArray异常如何解决
问题原因
你抛出的ClassCastException是JSON节点类型判断错误导致的:json-simple库中,{}包裹的键值对结构对应JSONObject类型,[]包裹的列表结构对应JSONArray类型,你之前的代码把最外层models键对应的JSONObject直接强转成了JSONArray,类型不匹配就会触发这个报错。
正确读取步骤
先梳理你提供的JSON结构层级,逐层读取即可:
- 最外层是根
JSONObject,取models键得到的是地区键映射模型列表的JSONObject(不是数组,这是报错的核心点) - 从上述对象中取对应地区键(比如示例里的
IN),得到的才是车系列表JSONArray - 遍历车系数组,每个元素是车系
JSONObject,可以直接取出modelName、modelTagline字段 - 每个车系对象下的
models键是具体车型配置数组,遍历后取每个配置对象下的variants数组 - 遍历变参数组,每个元素是变体
JSONObject,即可取出variantCode字段
可运行参考代码
import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import java.io.FileReader; public class BikeModelParser { public static void main(String[] args) throws Exception { JSONParser jsonParser = new JSONParser(); // 替换为你的JSON文件实际路径 JSONObject rootNode = (JSONObject) jsonParser.parse(new FileReader("model-config.json")); // 注意:这里是JSONObject,不要强转成JSONArray JSONObject modelsContainer = (JSONObject) rootNode.get("models"); // 取IN区域的车系列表,这一层才是数组 JSONArray inSeriesList = (JSONArray) modelsContainer.get("IN"); for (Object seriesItem : inSeriesList) { JSONObject series = (JSONObject) seriesItem; // 读取车系名称、宣传语 String modelName = (String) series.get("modelName"); String tagline = (String) series.get("modelTagline"); System.out.printf("车系:%s | 宣传语:%s%n", modelName, tagline); JSONArray detailList = (JSONArray) series.get("models"); for (Object detailItem : detailList) { JSONObject detail = (JSONObject) detailItem; JSONArray variantList = (JSONArray) detail.get("variants"); // 判空避免空指针 if (variantList == null) continue; for (Object variantItem : variantList) { JSONObject variant = (JSONObject) variantItem; String variantCode = (String) variant.get("variantCode"); System.out.printf(" 关联变体编码:%s%n", variantCode); } } } } }
注意事项
- 实际运行前先检查你的JSON文件格式,你贴出的示例末尾缺失了几个闭合括号,属于不合法JSON,会触发解析错误,先补全括号保证结构完整
- 生产环境使用时建议在每次类型转换前加
instanceof校验,避免JSON结构和预期不符时抛出类型转换异常、空指针异常 - 如果后续JSON结构持续迭代,手动逐层强转的代码维护成本很高,可以替换为Jackson、Gson等支持JSON直接映射Java POJO的类库,减少手动类型转换的代码量。
内容的提问来源于stack exchange,提问作者Avish
相关产品推荐
相关产品推荐

