【问题标题】:Reading element one by one in JsonArray在 JsonArray 中逐个读取元素
【发布时间】:2020-06-29 10:29:45
【问题描述】:

我有以下由 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

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

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

【问题讨论】:

  • 从哪里导入Json、JsonObject和JsonArray?
  • @simdevmon import com.eclipsesource.json.Json;

标签: java json jackson jackson-databind


【解决方案1】:

您似乎正在使用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 ...虽然这个类没有实现List。或者,您可以利用 com.google.gson.JsonArray 实现 Iterable 的事实并编写一个“for each”循环:

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

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


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


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

【讨论】:

    猜你喜欢
    • 2014-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 2012-08-23
    • 1970-01-01
    相关资源
    最近更新 更多