我已经阅读了很多帖子,但仍然无法找到或理解如何处理可以有 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/