it-roy-ru.com

JSON Элемент проверки Java - это JSONArray или JSONObject

Как проверить, является ли элемент JSONArray или JSONObject. Я написал код для проверки, 

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

} else {

}

В этом случае, если элементом 'category' является JSONObject, тогда он работает нормально, но если он содержит массив, он генерирует исключение: JSONArray не может быть преобразован в JSONObject. Пожалуйста, помогите . Спасибо.

19
Neetesh

Да, это потому, что 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 или ноль, если он не является действительным JSONArray.

25
Ovidiu Latcu

Даже если вы получили ответ, но он может помочь другим пользователям ... 

 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.

16
Vikas Gupta
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 ()

9
neworld
           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());
                }
            }
0
Anand

Вы можете использовать instanceof, чтобы проверить тип получаемого результата. Тогда вы можете справиться с этим, как вы хотите.

0
Dimitris Makris