JSON Java check element est un JSONArray ou JSONObject

Comment vérifier si un élément est un JSONArray ou un JSONObject. J'ai écrit le code pour vérifier,

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

} else {

}

dans ce cas si l'élément 'category' est JSONObject alors il fonctionne bien mais s'il contient un tableau alors il lance exception: JSONArray ne peut pas être converti en JSONObject. S'il vous plaît aider. Grâce.

19
demandé sur Neetesh 2011-09-02 18:06:59

5 réponses

Oui, c'est parce que l' getJSONObject("category") va essayer de convertir ce String pour un JSONObject ce qui permettra de jeter un JSONException. Vous devez faire ce qui suit:

Vérifiez si cet objet est un JSONObject via:

   JSONObject category=jsonObject.optJSONObject("Category");

qui renvoie un JSONObject ou null si le category objet n'est pas un objet json. Ensuite, vous procédez de la manière suivante:

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

qui vous rendra votre JSONArray ou null si elle n'est pas valide JSONArray .

25
répondu Ovidiu Latcu 2011-09-02 14:18:49

même si vous avez votre réponse, elle peut quand même aider d'autres utilisateurs...

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

Ici Law autres JSONObject et LawSet est la clé que vous voulez trouver comme JSONObject or JSONArray.

16
répondu Vikas Gupta 2012-12-11 12:50:36
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 est capable de retourner plus de types:http://developer.android.com/reference/org/json/JSONTokener.html#nextValue()

9
répondu neworld 2012-10-27 13:37:23

Vous pouvez utiliser instanceof pour vérifier le type de résultat obtenu. Alors tu peux le gérer comme tu veux.

0
répondu Dimitris Makris 2011-09-02 14:11:58
           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
répondu Anand 2012-04-20 08:47:12