JSON解析问题:如何获取嵌套的results数组?
解决嵌套JSON数组获取问题
没问题,我来帮你搞定这个无法获取嵌套results数组的问题!
首先咱们先理清你的JSON结构:
{"results":[{"displayName":"Jack","count":"5","results":["jack","sam","kelly"],"spam":"14"}]}
这里外层的results是一个JSON数组,数组里的每个元素是一个JSONObject,而这个内层对象里又包含了一个名为results的嵌套数组(也就是你要获取的["jack","sam","kelly"])。你的原代码只处理了外层数组里的displayName和count字段,没对嵌套数组做操作,所以才拿不到它。
修改后的代码示例
下面是调整后的完整代码,我会加上嵌套数组的获取和处理逻辑:
import org.json.JSONArray; import org.json.JSONObject; import java.util.ArrayList; import java.util.List; // 假设response是你的JSON字符串 JSONObject jsonObject = new JSONObject(response); // 先拿到外层的results数组,给它起个明确的名字避免混淆 JSONArray outerResultsArray = jsonObject.getJSONArray("results"); for (int i = 0; i < outerResultsArray.length(); i++) { JSONObject innerObj = outerResultsArray.getJSONObject(i); // 获取你原本需要的字段 String displayName = innerObj.getString("displayName"); String count = innerObj.getString("count"); String spam = innerObj.getString("spam"); // 顺便把spam字段也取出来 // 关键:获取嵌套的results数组 JSONArray nestedResultsArray = innerObj.getJSONArray("results"); // 遍历嵌套数组,把里面的元素存起来或者直接使用 List<String> nestedNames = new ArrayList<>(); for (int j = 0; j < nestedResultsArray.length(); j++) { String name = nestedResultsArray.getString(j); nestedNames.add(name); // 也可以直接打印单个元素:System.out.println("嵌套元素:" + name); } // 测试输出所有内容 System.out.println("DisplayName: " + displayName); System.out.println("Count: " + count); System.out.println("Spam: " + spam); System.out.println("嵌套的results数组内容:" + nestedNames); }
几个关键说明
- 命名区分:我把外层数组命名为
outerResultsArray,内层对象叫innerObj,这样能避免和嵌套的results字段混淆,代码可读性更强 - 嵌套数组获取:直接通过内层JSONObject的
getJSONArray("results")方法就能拿到嵌套数组,和你获取外层数组的逻辑类似 - 安全处理(可选):如果担心嵌套的
results字段可能不存在,可以用optJSONArray("results")替代getJSONArray,它会在字段不存在时返回null而不是抛出异常,你可以加个判断:JSONArray nestedResultsArray = innerObj.optJSONArray("results"); if (nestedResultsArray != null) { // 这里再做遍历处理 }
这样你就能成功获取到那个嵌套的["jack","sam","kelly"]数组啦!
内容的提问来源于stack exchange,提问作者user1318741
相关产品推荐
相关产品推荐

