在 JsonArray 中一个一个地读取元素

Reading element one by one in JsonArray

API 调用返回了以下 JSON。

String jsonString="{\r\n" + 
        "    \"count\": 100,\r\n" + 
        "    \"limit\": 100,\r\n" + 
        "    \"totalResults\": 225,\r\n" + 
        "    \"hasMore\": true,\r\n" + 
        "    \"items\": [\r\n" + 
        "        {\r\n" + 
        "            \"id\": \"55D40522-8672-48B0-B225-FD3CE6686AD6\",\r\n" + 
        "            \"name\": \"AcmeHCMExtended\",\r\n" + 
        "            \"version\": \"20.01.01.03\",\r\n" + 
        "            \"status\": \"DRAFT\"\r\n" + 
        "        },\r\n" + 
        "        {\r\n" + 
        "            \"id\": \"2DB4C83B-0CF9-4A8E-AC41-A29B30324121\",\r\n" + 
        "            \"name\": \"AFinancialBot\",\r\n" + 
        "            \"version\": \"1.0\",\r\n" + 
        "            \"status\": \"DRAFT\"\r\n" + 
        "        },\r\n" + 
        "        {\r\n" + 
        "            \"id\": \"7EA85B81-3CA1-4BE0-B095-217E7C93DCEF\",\r\n" + 
        "            \"name\": \"AIAMFG\",\r\n" + 
        "            \"version\": \"1.0\",\r\n" + 
        "            \"status\": \"DRAFT\"\r\n" + 
        "        }"

我想在主题下一个一个地看名字。我正在使用以下代码。

JsonObject obj=Json.parse(jsonString).asObject();
 JsonArray items=obj.get("items").asArray();
System.out.println(items);   //it prints everything under items.
`System.out.println(items.name); `  //It gives error

我无法迭代项目数组。它不显示数组的长度 属性。

你能指导我如何逐个访问元素吗?

您似乎在使用 javax.json.JsonArray API 或类似的东西。如果是:

JsonArray items = obj.get("items").asArray();

for (int i = 0; i < items.size(); i++) {
    System.out.println(items.getJsonObject(i));
}

请注意,JsonArray 实现了 java.util.List,并且您使用标准 List API 方法获取尺寸。

相同的代码可以与 com.google.gson.JsonArray 一起使用......尽管这个 class 没有实现 List。或者,您可以利用 com.google.gson.JsonArray 实现 Iterable 的事实并编写一个“for each”循环:

for (JsonElement e: items) {
    System.out.println(e);
}

org.json.JSONArray 的等效代码使用 length() 而不是 size()


在所有情况下,您应该能够通过搜索和阅读您正在使用的 JSON 库的 javadoc 来回答您自己的问题。


更新 - 显然你正在使用 com.eclipsesource.minimal-json。根据这个javadoc,它有一个size()方法,实现了Iterable.