JSON Java检查元素是JSONArray或JSONObject

时间:2011-09-02 14:07:00

标签: java android web-services json

如何检查元素是JSONArray还是JSONObject。我写了代码来检查,

if(jsonObject.getJSONObject("Category").getClass().isArray()) {

} else {

}

在这种情况下,如果元素'category'是JSONObject,那么它可以正常工作但如果它包含一个数组,那么它会抛出异常:JSONArray无法转换为JSONObject。请帮忙。 感谢。

5 个答案:

答案 0 :(得分:25)

是的,这是因为getJSONObject("category")会尝试将String转换为JSONObject,这会引发JSONException。您应该执行以下操作:

使用以下方法检查该对象是否为JSONObject

   JSONObject category=jsonObject.optJSONObject("Category");
如果JSONObject对象不是json对象,

将返回nullcategory。 然后执行以下操作:

   JSONArray categories;
   if(category == null)
        categories=jsonObject.optJSONArray("Category");

将返回JSONArray或null,如果它不是有效的JSONArray

答案 1 :(得分:16)

即使你已经得到答案,但它仍可以帮助其他用户......

 if (Law.get("LawSet") instanceof JSONObject)
 {
    JSONObject Lawset = Law.getJSONObject("LawSet");                        
 }
 else if (Law.get("LawSet") instanceof JSONArray)
{
    JSONArray Lawset = Law.getJSONArray("LawSet");
}

此处Law是其他JSONObjectLawSet是您要查找JSONObject or JSONArray的关键字。

答案 2 :(得分:9)

String data = "{ ... }";
Object json = new JSONTokener(data).nextValue();
if (json instanceof JSONObject)
  //you have an object
else if (json instanceof JSONArray)
  //you have an array

tokenizer能够返回更多类型:http://developer.android.com/reference/org/json/JSONTokener.html#nextValue()

答案 3 :(得分:0)

您可以使用instanceof检查所获得的结果类型。然后你可以按照自己的意愿处理它。

答案 4 :(得分:0)

           if (element instanceof JSONObject) {

                Map<String, Object> map = json2Java.getMap(element
                        .toString());
                if (logger.isDebugEnabled()) {
                    logger.debug("Key=" + key + " JSONObject, Values="
                            + element);
                }
                for (Entry<String, Object> entry : map.entrySet()) {
                    if (logger.isDebugEnabled()) {
                        logger.debug(entry.getKey() + "/"
                                + entry.getValue());
                    }
                    jsonMap.put(entry.getKey(), entry.getValue());
                }
            }