我已阅读了很多帖子,仍然无法找到或理解如何处理可能包含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。
非常感谢!
答案 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结果的情况。