使用JSON帮助解析Yahoo搜索结果不是JsonArray异常

时间:2011-02-02 17:17:55

标签: java android json

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

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

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

当有多个结果时工作正常,但是当Yahoo Query中只返回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。

非常感谢!

2 个答案:

答案 0 :(得分:1)

这是使用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;
  }

答案 1 :(得分:0)

您想要检查totalResultsReturned == 1.如果是,您应该使用.getJSONObject('Result'),然后使用该对象构造一个JSONArray作为第一个值(http://www.json。组织/的Javadoc /组织/ JSON / JSONArray.html)。

据推测,你正在处理0结果的情况。