Accessing members of items in a JSONArray with Java Accessing members of items in a JSONArray with Java arrays arrays

Accessing members of items in a JSONArray with Java


Have you tried using JSONArray.getJSONObject(int), and JSONArray.length() to create your for-loop:

for (int i = 0; i < recs.length(); ++i) {    JSONObject rec = recs.getJSONObject(i);    int id = rec.getInt("id");    String loc = rec.getString("loc");    // ...}


An org.json.JSONArray is not iterable.
Here's how I process elements in a net.sf.json.JSONArray:

    JSONArray lineItems = jsonObject.getJSONArray("lineItems");    for (Object o : lineItems) {        JSONObject jsonLineItem = (JSONObject) o;        String key = jsonLineItem.getString("key");        String value = jsonLineItem.getString("value");        ...    }

Works great... :)


Java 8 is in the market after almost 2 decades, following is the way to iterate org.json.JSONArray with java8 Stream API.

import org.json.JSONArray;import org.json.JSONObject;@Testpublic void access_org_JsonArray() {    //Given: array    JSONArray jsonArray = new JSONArray(Arrays.asList(new JSONObject(                    new HashMap() {{                        put("a", 100);                        put("b", 200);                    }}            ),            new JSONObject(                    new HashMap() {{                        put("a", 300);                        put("b", 400);                    }}            )));    //Then: convert to List<JSONObject>    List<JSONObject> jsonItems = IntStream.range(0, jsonArray.length())            .mapToObj(index -> (JSONObject) jsonArray.get(index))            .collect(Collectors.toList());    // you can access the array elements now    jsonItems.forEach(arrayElement -> System.out.println(arrayElement.get("a")));    // prints 100, 300}

If the iteration is only one time, (no need to .collect)

    IntStream.range(0, jsonArray.length())            .mapToObj(index -> (JSONObject) jsonArray.get(index))            .forEach(item -> {               System.out.println(item);            });