411 Stimmen

Wie kann man über ein JSONObject iterieren?

Ich verwende eine JSON-Bibliothek namens JSONObject (Ich habe nichts dagegen, wenn ich wechseln muss).

Ich weiß, wie man über die folgenden Punkte iteriert JSONArrays aber wenn ich JSON-Daten von Facebook parse, erhalte ich kein Array, sondern nur ein JSONObject aber ich muss in der Lage sein, auf ein Element über seinen Index zuzugreifen, z. B. JSONObject[0] um die erste zu bekommen, und ich kann nicht herausfinden, wie man das macht.

{
   "http://http://url.com/": {
      "id": "http://http://url.com//"
   },
   "http://url2.co/": {
      "id": "http://url2.com//",
      "shares": 16
   }
   ,
   "http://url3.com/": {
      "id": "http://url3.com//",
      "shares": 16
   }
}

696voto

Rickey Punkte 7470

Vielleicht hilft das:

JSONObject jsonObject = new JSONObject(contents.trim());
Iterator<String> keys = jsonObject.keys();

while(keys.hasNext()) {
    String key = keys.next();
    if (jsonObject.get(key) instanceof JSONObject) {
          // do something with jsonObject here      
    }
}

107voto

AssemblyX Punkte 1821

In meinem Fall fand ich die Iteration der names() funktioniert gut

for(int i = 0; i<jobject.names().length(); i++){
    Log.v(TAG, "key = " + jobject.names().getString(i) + " value = " + jobject.get(jobject.names().getString(i)));
}

87voto

maaz Punkte 4181

Ich werde Iterator vermeiden, da sie Objekt während der Iteration hinzufügen/entfernen können, auch für sauberen Code verwenden for-Schleife. es wird einfach sauber & weniger Zeilen sein.

Java 8 und Lamda verwenden [Update 4/2/2019]

import org.json.JSONObject;

public static void printJsonObject(JSONObject jsonObj) {
    jsonObj.keySet().forEach(keyStr ->
    {
        Object keyvalue = jsonObj.get(keyStr);
        System.out.println("key: "+ keyStr + " value: " + keyvalue);

        //for nested objects iteration if required
        //if (keyvalue instanceof JSONObject)
        //    printJsonObject((JSONObject)keyvalue);
    });
}

Auf alte Weise [Update 4/2/2019]

import org.json.JSONObject;

public static void printJsonObject(JSONObject jsonObj) {
    for (String keyStr : jsonObj.keySet()) {
        Object keyvalue = jsonObj.get(keyStr);

        //Print key and value
        System.out.println("key: "+ keyStr + " value: " + keyvalue);

        //for nested objects iteration if required
        //if (keyvalue instanceof JSONObject)
        //    printJsonObject((JSONObject)keyvalue);
    }
}

Original-Antwort

import org.json.simple.JSONObject;
public static void printJsonObject(JSONObject jsonObj) {
    for (Object key : jsonObj.keySet()) {
        //based on you key types
        String keyStr = (String)key;
        Object keyvalue = jsonObj.get(keyStr);

        //Print key and value
        System.out.println("key: "+ keyStr + " value: " + keyvalue);

        //for nested objects iteration if required
        if (keyvalue instanceof JSONObject)
            printJsonObject((JSONObject)keyvalue);
    }
}

81voto

Acuna Punkte 1517

Ich kann nicht glauben, dass es keine einfachere und sicherere Lösung als die Verwendung eines Iterators in diesen Antworten gibt...

JSONObject names () Methode gibt eine JSONArray der JSONObject Tasten, so dass man sie einfach in einer Schleife durchgehen kann:

JSONObject object = new JSONObject ();
JSONArray keys = object.names ();

for (int i = 0; i < keys.length (); i++) {

   String key = keys.getString (i); // Here's your key
   String value = object.getString (key); // Here's your value

}

19voto

aviomaksim Punkte 2507
Iterator<JSONObject> iterator = jsonObject.values().iterator();

while (iterator.hasNext()) {
 jsonChildObject = iterator.next();

 // Do whatever you want with jsonChildObject 

  String id = (String) jsonChildObject.get("id");
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X