2012-03-07 38 views
0

某些URI返回JSONObject对象,而其他URI返回JSONArray。我通常把所有东西都放进JSONArray,到目前为止我没有例外。当然,这不是最安全的方式:如何知道JSON URI返回的内容?

如何知道JSON URI返回的内容?

我可以通过URI的类型“猜测”吗?还是有更好的方法?当我说URI的类型时,查看Twitter的URI,如http://search.twitter.com/search.json?q=android,我可以“猜测”它返回JSONArray。但是这种“猜测”阻止我把任何东西放入JSONObject

回答

3

这应该在API documentation中指定,如果您不想指望它,您可以使用try-catch来查找实际类型。

+0

是的,但一些API文档是可怕的,没有信息。并不是说Philipp的解决方案更快。 – sandalone 2012-03-07 08:05:36

+0

然后玩得开心,但在这个特定情况下,文档似乎非常清晰(这是我第一次看到它们) – MByD 2012-03-07 08:06:32

+0

阅读文档时+1,我甚至建议在意外的API响应失败,而不是猜测数据可能是什么。 – 2012-03-07 08:06:35

1

我假设你正在使用org.json类。他们工作,但很基础。

尝试Gson,它有一个更丰富,可以说是更好的(*)API:

String|Reader|JsonReader input = ... 
JsonElement json = new JsonParser(input).parse(); 
if (json.isJsonArray()) { 
    JsonArray array = json.asJsonArray(); 
    ... 
} else if (json.isJsonObject()) { 
    JsonObject object = json.asJsonObject(); 
    ... 
} 

,而不是is/as方法,您也可以使用instanceof JsonObject/Array和常规的Java蒙上。

(*)就是一个例子:GSON的JsonArray给你foreach循环利用作为一个Iterable<JsonElement>主场迎战get(int)狂欢是org.json.JSONArray