web-dev-qa-db-fra.com

L'élément de contrôle JSON Java 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 correctement, mais s'il contient un tableau, il génère une exception: JSONArray ne peut pas être converti en JSONObject. S'il vous plaît aider. Merci.

19
Neetesh

Oui, c'est parce que la getJSONObject("category") essaiera de convertir cette String en JSONObject, ce qui donnera une JSONException. Vous devriez faire ce qui suit:

Vérifiez si cet objet est une JSONObject en utilisant:

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

qui retournera un JSONObject ou null si l'objet category n'est pas un objet json. Ensuite, procédez comme suit:

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

qui renverra votre JSONArray ou null si ce n'est pas un JSONArray valide.

25
Ovidiu Latcu

Même si vous avez obtenu votre réponse, elle peut néanmoins aider les 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 est autre JSONObject et LawSet est la clé que vous voulez trouver comme 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 est capable de retourner plusieurs types: 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

Vous pouvez utiliser instanceof pour vérifier le type du résultat obtenu. Ensuite, vous pouvez le gérer comme vous le souhaitez.

0
Dimitris Makris