如何检查元素是JSONArray还是JSONObject。我写了代码来检查,
if(jsonObject.getJSONObject("Category").getClass().isArray()) {
} else {
}
在这种情况下,如果元素'category'是JSONObject,那么它可以正常工作但如果它包含一个数组,那么它会抛出异常:JSONArray无法转换为JSONObject。请帮忙。 感谢。
答案 0 :(得分:25)
是的,这是因为getJSONObject("category")
会尝试将String
转换为JSONObject,这会引发JSONException
。您应该执行以下操作:
使用以下方法检查该对象是否为JSONObject
JSONObject category=jsonObject.optJSONObject("Category");
如果JSONObject
对象不是json对象,将返回null
或category
。
然后执行以下操作:
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
是其他JSONObject
,LawSet
是您要查找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());
}
}