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

Android解析LoL英雄JSON报错:org.json.JSONException: No value for Aatrox

问题排查:org.json.JSONException: No value for Aatrox

嘿,我一眼就揪出你代码里的问题啦,咱们来快速搞定这个JSON解析的bug~

核心错误原因

你已经正确拿到了包含所有英雄数据的champions对象(也就是json.getJSONObject("data")的结果),但在循环遍历键值对的时候,犯了一个小疏忽:你从外层的根json对象里去取key对应的值,而不是从champions对象里获取!

外层根JSON里根本不存在"Aatrox"这个键——它是嵌套在data字段下面的,所以调用json.get(key)自然会抛出找不到值的异常。

修正后的代码

把setupChampionData方法里的循环部分修改一下,从champions对象中读取对应英雄的数据:

private void setupChampionData() {
    createRequest("http://ddragon.leagueoflegends.com/cdn/7.24.1/data/en_US/champion.json", new VolleyCallback() {
        @Override
        public void onSuccess(Object response) {
            JSONObject json = ((JSONObject) response);
            try {
                JSONObject champions = json.getJSONObject("data");
                Iterator<String> temp = champions.keys();
                System.out.println(json.toString());
                while (temp.hasNext()) {
                    String key = temp.next();
                    // 关键修改:从champions对象获取值,而非外层json
                    JSONObject value = champions.getJSONObject(key);
                    championData.put(value.getInt("key"), value);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

额外优化建议

为了让代码更健壮,你可以用optJSONObject替代getJSONObject,这样如果某个英雄数据格式异常时,不会直接抛出异常而是返回null,方便你做容错处理:

JSONObject value = champions.optJSONObject(key);
if (value != null) {
    championData.put(value.getInt("key"), value);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:10:29