java - 帮助使用 JSON 解析 Yahoo 搜索结果 Not a JsonArray exception

标签 java android json

我已经阅读了很多帖子,但仍然无法找到或理解如何处理可以有 1 个结果或结果数组的结果集。 (来自雅虎搜索)

如果收到多个结果,我可以完美地解析结果,但是当只有 1 个搜索结果时,我得到 JSONException:blahblahbalh 不是 JSONArray。

JSONArray results = resultObject.getJSONArray("Result");

当有多个结果时工作正常,但是当 Yahoo 查询仅返回 1 个结果时,我如何强制内置 JSON 解析器接受它作为结果?

这个单一结果无法解析为 JSON 数组:

{
  "ResultSet": {
    "totalResultsAvailable": "108",
    "totalResultsReturned": "1",
    "firstResultPosition": "1",
    "ResultSetMapUrl": "http:\/\/maps.yahoo.com\/broadband\/?q1=Virginia+Beach%2C+VA+23454-4608tt=mexicantp=1",
    "Result": {
      "id": "12811175",

    }
  }
}

但这可以很好地解析为 JSONArray:

    {
  "ResultSet": {
    "totalResultsAvailable": "108",
    "totalResultsReturned": "2",
    "firstResultPosition": "1",
    "ResultSetMapUrl": "http:\/\/maps.yahoo.com\/broadband\/?q1=Virginia+Beach%2C+VA+23454-4608tt=mexicantp=1",
    "Result": [
      {
        "id": "12811175",

      },
      {
        "id": "12814560",
      }
    ]
  }
}

对不起,如果我在胡言乱语,但我无法弄清楚如何从第一个结果示例中获得长度为 1 的 JSONArray,这让我发疯。

非常感谢!

最佳答案

这是使用 JSOn 的问题之一。如果有两个对象,则将其视为 JSONArray,否则将其视为 JSONObject。

据我所知,您只需假设它可能是其中之一并相应地进行编码。您可以将杂乱的细节包装在辅助函数中,例如:

 JSONArray getArrayOrObject(JSONObject parent, String name) {
    JSONArray results = parent.optJSONArray(name);
    if (results == null) {
      results = new JSONArray();
      JSONObject object = parent.optJSONObject("Result");
      if (object != null) {
        results.put(object);
      }
    }
    return results;
  }

关于java - 帮助使用 JSON 解析 Yahoo 搜索结果 Not a JsonArray exception,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4877574/

相关文章:

java - 使用 Java8 Streams 进行部分字符串匹配

java - 如何在 Android 中即将被垃圾收集时将静态成员保留在共享首选项中

android - GeofencingRequest 上 `setInitialTrigger` 的用途是什么?

java - 使用同一 WebDriver 对象执行多个 JUnit 测试

java - 使用 BufferedReader 读取行

android - 升级后 Flutter 无法同时在 IOS 和 Android 上运行

java - 从内部方法返回一个对象

json - Swift 无法解析 NSMutableDictionary 中的整数

json - Presto unnest json

java - 在 Java 中提供 RESTful JSON API