如何遍历API返回JSON的items数组并逐个读取name字段?
如何遍历JSON数组并读取指定字段?
看起来你已经成功解析了API返回的JSON并拿到了items数组,但直接访问items.name肯定会报错——因为items是一个数组集合,不是单个包含name属性的对象呀!
针对你用的这种动态JSON解析方式(从Json.parse().asObject()的写法来看,应该是Jodd Json库),给你两种可行的遍历方式,帮你逐个取出每个item的name字段:
方式1:普通for循环遍历数组
利用数组的size()方法获取长度,逐个取出元素转为JsonObject后提取name:
JsonObject obj = Json.parse(jsonString).asObject(); JsonArray items = obj.get("items").asArray(); for (int i = 0; i < items.size(); i++) { // 把数组里的每个元素转成JsonObject JsonObject itemObj = items.get(i).asObject(); // 提取name字段并打印 String itemName = itemObj.get("name").asString(); System.out.println(itemName); }
方式2:增强for循环遍历
Jodd Json的JsonArray实现了Iterable接口,所以可以用更简洁的增强for循环:
JsonObject obj = Json.parse(jsonString).asObject(); JsonArray items = obj.get("items").asArray(); for (JsonValue value : items) { JsonObject itemObj = value.asObject(); String itemName = itemObj.get("name").asString(); System.out.println(itemName); }
为什么之前的写法会报错?
items是数组类型,它本身没有name属性,只有数组里的每一个元素才是包含id、name等字段的对象。必须先遍历数组中的每个元素,再从单个元素对象里提取name。
如果后续需要频繁处理这类JSON,也可以考虑用实体类映射的方式(比如Gson、Jackson库),先定义对应结构的Java类,直接把JSON转成对象,操作字段会更方便,示例如下(以Gson为例):
// 定义对应JSON结构的实体类 class ApiResult { private int count; private int limit; private int totalResults; private boolean hasMore; private List<Item> items; // 生成getter方法 public List<Item> getItems() { return items; } } class Item { private String id; private String name; private String version; private String status; // 生成getter方法 public String getName() { return name; } } // 解析并遍历 Gson gson = new Gson(); ApiResult result = gson.fromJson(jsonString, ApiResult.class); for (Item item : result.getItems()) { System.out.println(item.getName()); }
这种方式的代码可读性和维护性更好,适合处理复杂的JSON结构。
内容的提问来源于stack exchange,提问作者Shruti sharma
相关产品推荐
相关产品推荐

