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

如何用迭代器遍历JSON数组并正确组合对象字段(修正代码问题)

这个问题其实是迭代器使用的经典误区——你每次调用iterator.next()都会让迭代器直接跳到下一个元素,所以在同一循环里连续调用两次,相当于第一次拿第一个对象的Name,第二次直接跳到第二个对象拿Weight,不仅拿不到同一个对象的两个字段,还会导致循环次数减半,甚至最后抛出NoSuchElementException。

修正的思路很简单:先把当前迭代到的对象一次性取出来存到变量里,再从这个变量里获取需要的字段,这样就不会让迭代器意外前进了。

修正后的完整代码

JSONArray jsonarray = (JSONArray) parser.parse(string);
// 建议指定泛型为String,提升类型安全性
List<String> list = new ArrayList<>();
Iterator<JSONObject> iterator = jsonarray.iterator();
while (iterator.hasNext()) {
    // 只调用一次next(),获取当前的JSON对象
    JSONObject currentObj = iterator.next();
    // 从同一个对象中读取Name和Weight并拼接
    String combinedStr = currentObj.get("Name") + "/" + currentObj.get("Weight");
    list.add(combinedStr);
}

进阶优化(Java 8+)

如果你的项目使用Java 8及以上版本,还可以用Stream API简化代码,避免手动处理迭代器,代码会更简洁易读:

import java.util.stream.Collectors;

// ...

JSONArray jsonarray = (JSONArray) parser.parse(string);
List<String> list = jsonarray.stream()
    // 将流中的元素转换为JSONObject类型
    .map(item -> (JSONObject) item)
    // 拼接Name和Weight字段
    .map(item -> item.get("Name") + "/" + item.get("Weight"))
    // 收集为List
    .collect(Collectors.toList());

这样就能得到你预期的["name1/3","name2/2"]结果啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:31:36