You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java解析JSON报ClassCastException 如何提取model及variant相关字段

问题根因

你遇到的ClassCastException是JSON节点类型强转错误导致的:在org.json.simple的实现中,{}包裹的键值对结构对应JSONObject类型,[]包裹的列表结构对应JSONArray类型,你在解析过程中把某层本该是JSONObject的节点直接强转成了JSONArray,才会抛出这个异常。
另外你提供的JSON样本本身存在语法错误:多处imageUrl字段末尾多写了冗余逗号,文件末尾存在多余的数组闭合括号,需要先修正这些语法问题才能正常完成解析。

字段层级梳理

你需要读取的三个字段,在JSON结构中的路径从上到下如下,每层类型标注清楚,避免强转错误:

  • 根节点:JSONObject类型,包含models字段
  • root.models:JSONObject类型,包含区域标识字段IN
  • root.models.IN:JSONArray类型,数组每个元素是区域下的大车型条目
  • root.models.IN[*]:JSONObject类型,这里可以直接读取外层的modelName、modelTagline字段,该节点还包含内层具体车型数组models
  • root.models.IN[*].models[*]:JSONObject类型,这里可以读取具体车型的tagLine字段,该节点还包含车型变体数组variants
  • root.models.IN[*].models[*].variants[*]:JSONObject类型,这里可以读取对应车型的variantCode字段
参考实现代码

先确保你已经正确引入json-simple依赖,解析逻辑参考如下:

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import java.io.FileReader;

public class CarJsonParser {
    public static void main(String[] args) throws Exception {
        JSONParser jsonParser = new JSONParser();
        // 替换为你的JSON文件实际存储路径
        JSONObject rootNode = (JSONObject) jsonParser.parse(new FileReader("car_model.json"));

        // 逐层读取节点,严格对应类型强转
        JSONObject firstLevelModels = (JSONObject) rootNode.get("models");
        JSONArray inRegionModels = (JSONArray) firstLevelModels.get("IN");

        // 遍历区域下所有大车型
        for (Object regionItem : inRegionModels) {
            JSONObject bigModel = (JSONObject) regionItem;
            String modelName = (String) bigModel.get("modelName");
            String bigModelTagline = (String) bigModel.get("modelTagline");
            System.out.printf("车型系列:%s,系列标语:%s%n", modelName, bigModelTagline);

            JSONArray specificModels = (JSONArray) bigModel.get("models");
            // 遍历系列下所有具体车型
            for (Object specificItem : specificModels) {
                JSONObject specificModel = (JSONObject) specificItem;
                String modelTagline = (String) specificModel.get("tagLine");
                System.out.printf("  具体车型标语:%s%n", modelTagline);

                JSONArray variants = (JSONArray) specificModel.get("variants");
                // 遍历车型下所有变体
                for (Object variantItem : variants) {
                    JSONObject variant = (JSONObject) variantItem;
                    String variantCode = (String) variant.get("variantCode");
                    System.out.printf("    变体编码:%s%n", variantCode);
                }
            }
        }
    }
}
注意事项
  • 每次强转前先对照JSON结构确认节点类型:遇到大括号结构转JSONObject,遇到方括号结构转JSONArray,不要凭猜测强转节点类型
  • 如果JSON结构可能动态调整,可以在强转前用instanceof关键字判断节点实际类型,避免运行时抛出类型转换异常
  • 解析前先用JSON校验工具检查文件语法,多余逗号、括号不匹配等问题会直接导致解析阶段失败,不会走到字段读取逻辑

内容的提问来源于stack exchange,提问作者Avish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 05:51:28