Элемент проверки JSON Java - это JSONArray или JSONObject
Как проверить, является ли элемент JSONArray или JSONObject. Я написал код для проверки,
if(jsonObject.getJSONObject("Category").getClass().isArray()) {
} else {
}
В этом случае, если элемент 'category' является JSONObject, то он работает нормально, но если он содержит массив, то он генерирует исключение: JSONArray не может быть преобразован в JSONObject. Пожалуйста помоги.
Спасибо.
Ответы
Ответ 1
Да, это потому, что getJSONObject("category")
попытается преобразовать этот String
в JSONObject то, что будет бросать JSONException
. Вы должны сделать следующее:
Проверьте, является ли этот объект JSONObject
, используя:
JSONObject category=jsonObject.optJSONObject("Category");
который вернет JSONObject
или null
, если объект category
не является объектом json.
Затем вы делаете следующее:
JSONArray categories;
if(category == null)
categories=jsonObject.optJSONArray("Category");
который вернет ваш JSONArray
или null, если он недействителен JSONArray
.
Ответ 2
Даже если у вас есть свой ответ, но все же он может помочь другим пользователям...
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
.
Ответ 3
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()
Ответ 4
Вы можете использовать instanceof
, чтобы проверить тип получаемого результата. Тогда вы можете справиться с этим, как хотите.
Ответ 5
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());
}
}