39

I am trying to loop over the following JSON

{
    "dataArray": [{
        "A": "a",
        "B": "b",
        "C": "c"
    }, {
        "A": "a1",
        "B": "b2",
        "C": "c3"
    }]
}

What i got so far:

JSONObject jsonObj = new JSONObject(json.get("msg").toString());

for (int i = 0; i < jsonObj.length(); i++) {
    JSONObject c = jsonObj.getJSONObject("dataArray");

    String A = c.getString("A");
    String B = c.getString("B");
    String C = c.getString("C");

}

Any ideas?

Alosyius
  • 8,771
  • 26
  • 76
  • 120

4 Answers4

72

In your code the element dataArray is an array of JSON objects, not a JSON object itself. The elements A, B, and C are part of the JSON objects inside the dataArray JSON array.

You need to iterate over the array

public static void main(String[] args) throws Exception {
    String jsonStr = "{         \"dataArray\": [{              \"A\": \"a\",                \"B\": \"b\",               \"C\": \"c\"            }, {                \"A\": \"a1\",              \"B\": \"b2\",              \"C\": \"c3\"           }]      }";

    JSONObject jsonObj = new JSONObject(jsonStr);

    JSONArray c = jsonObj.getJSONArray("dataArray");
    for (int i = 0 ; i < c.length(); i++) {
        JSONObject obj = c.getJSONObject(i);
        String A = obj.getString("A");
        String B = obj.getString("B");
        String C = obj.getString("C");
        System.out.println(A + " " + B + " " + C);
    }
}

prints

a b c
a1 b2 c3

I don't know where msg is coming from in your code snippet.

Sotirios Delimanolis
  • 274,122
  • 60
  • 696
  • 724
8

Java Docs to the rescue:

You can use http://www.json.org/javadoc/org/json/JSONObject.html#getJSONArray(java.lang.String) instead

JSONArray dataArray= sync_reponse.getJSONArray("dataArray");

for(int n = 0; n < dataArray.length(); n++)
{
    JSONObject object = dataArray.getJSONObject(n);
    // do some stuff....
}
Jaydeep Patel
  • 2,394
  • 1
  • 21
  • 27
0

Here is a way to do it without indexing...

JsonArray jsonArray;
Iterator<JsonElement> it = jsonArray.iterator();
while(it.hasNext()){
    System.out.println(it.next());
}

In case you are using e.g. io.vertx.core.json.JsonArray you'll have to convert from Object:

JsonArray jsonArray;
Iterator<Object> it = jsonArray.iterator();
while(it.hasNext()){
    JsonObject jobj = (JsonObject) it.next();
    System.out.println(jobj);
}
ntg
  • 12,950
  • 7
  • 74
  • 95
0
JsonArray jsonArray = (JsonArray) jsonElement;
for (JsonElement element : jsonArray) {
    System.out.println(element.getAsJsonObject().get("name"));
}

This works fine for me, after typing what ntg posted, intellij let me know that this is possible.

Jake
  • 25
  • 7