Java使用org.json解析嵌套JSON遇错误求助
解决org.json解析嵌套JSON的错误
错误原因分析
你的代码存在三个关键问题,直接触发了报错:
- 重复构造JSONArray:
JSON.getJSONArray("data")已经返回合法的JSONArray对象,你却将它传入new JSONArray()构造器。org.json的JSONArray构造器仅接受字符串、集合或数组类型入参,传入另一个JSONArray会抛出异常。 - 循环变量混乱:初始化循环变量为
z=1,但判断条件误用了未定义的i;同时JSON数组索引从0开始,从1遍历会跳过第一个元素。 - 冗余包装JSONObject:
data.getJSONObject(z)已经返回JSONObject实例,无需再用new JSONObject()重复包装。
修正后的代码
import org.json.*; // content1为你从网络获取的JSON内容字符串 JSONObject rootJson = new JSONObject(content1.toString()); JSONArray playerDataArray = rootJson.getJSONArray("data"); // 遍历玩家配置数组,索引从0开始 for (int i = 0; i < playerDataArray.length(); i++) { JSONObject playerProfile = playerDataArray.getJSONObject(i); // 打印完整玩家配置 System.out.println(playerProfile.toString()); // 若需提取具体字段,例如uuid和name: // String uuid = playerProfile.getString("uuid"); // String name = playerProfile.getString("name"); // System.out.println("玩家UUID:" + uuid + ",名称:" + name); }
额外说明
从你的示例JSON结构来看,data字段本身就是存储玩家配置的数组,每个元素都是无命名的JSONObject,直接遍历该数组即可获取所有玩家配置。如果需要提取配置中的具体字段,使用getString()、getInt()等对应类型的方法即可。
内容的提问来源于stack exchange,提问作者Josh Lukin
相关产品推荐
相关产品推荐

