it-swarm.com.de

JSON Java Check Element ist ein JSONArray oder JSONObject

So prüfen Sie, ob ein Element ein JSONArray oder ein JSONObject ist. Ich habe den Code geschrieben, um zu überprüfen, 

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

} else {

}

Wenn in diesem Fall das Element 'category' JSONObject ist, funktioniert es einwandfrei. Wenn es jedoch ein Array enthält, wird eine Ausnahme ausgelöst: JSONArray kann nicht in JSONObject konvertiert werden. Bitte helfen Sie. Danke.

19
Neetesh

Ja, weil getJSONObject("category") versucht, diese String in ein JSONObject umzuwandeln, was eine JSONException auslöst. Sie sollten Folgendes tun:

Prüfen Sie, ob das Objekt eine JSONObject ist, indem Sie Folgendes verwenden:

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

die eine JSONObject oder null zurückgibt, wenn das category-Objekt kein json-Objekt ist. Dann machen Sie Folgendes:

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

die wird Ihre JSONArray oder null zurückgeben, wenn es keine gültige JSONArray ist.

25
Ovidiu Latcu

Obwohl Sie Ihre Antwort erhalten haben, kann sie dennoch anderen Benutzern helfen ... 

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

Hier ist Law eine andere JSONObject und LawSet ist der Schlüssel, den Sie als JSONObject or JSONArray finden möchten.

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 kann mehr Typen zurückgeben: 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

Sie können mit instanceof den Typ des Ergebnisses überprüfen, das Sie erhalten. Dann können Sie damit umgehen, wie Sie möchten.

0
Dimitris Makris