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.
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
.
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
.
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()
Vous pouvez utiliser instanceof
pour vérifier le type de résultat obtenu. Alors tu peux le gérer comme tu veux.
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());
}
}