Análisis de matriz JSON dentro del objeto JSON

Tengo un JSON con la siguiente estructura:

{"source":[ {"name":"john","age":20}, {"name":"michael","age":25}, {"name":"sara", "age":23} ] } 

He llamado a esta cadena JSON como mainJSON . Estoy intentando acceder a los elementos “nombre” y “edad” con el siguiente código Java:

 JSONArray jsonMainArr = new JSONArray(mainJSON.getJSONArray("source")); for (int i = 0; i < jsonMainArr.length(); i++) { // **line 2** JSONObject childJSONObject = jsonMainArr.getJSONObject(i); String name = childJSONObject.getString("name"); int age = childJSONObject.getInt("age"); } 

Me muestran la siguiente excepción para la línea número 2:

 org.json.JSONException: JSONArray initial value should be a string or collection or array. 

Por favor, guíame sobre dónde estoy cometiendo el error y cómo rectificarlo.

mainJSON.getJSONArray("source") devuelve un JSONArray , por lo tanto, puede eliminar el new JSONArray.

El contructor JSONArray con un parámetro de objeto espera que sea una Colección o Matriz (no JSONArray)

Prueba esto:

 JSONArray jsonMainArr = mainJSON.getJSONArray("source"); 

Tu código está bien, simplemente reemplaza la siguiente línea:

 JSONArray jsonMainArr = new JSONArray(mainJSON.getJSONArray("source")); 

con esta linea:

 JSONArray jsonMainArr = mainJSON.getJSONArray("source"); 

la línea 2 debe ser

 for (int i = 0; i < jsonMainArr.size(); i++) { // **line 2** 

Para la línea 3, tengo que hacer

  JSONObject childJSONObject = (JSONObject) new JSONParser().parse(jsonMainArr.get(i).toString()); 
 private static String readAll(Reader rd) throws IOException { StringBuilder sb = new StringBuilder(); int cp; while ((cp = rd.read()) != -1) { sb.append((char) cp); } return sb.toString(); } String jsonText = readAll(inputofyourjsonstream); JSONObject json = new JSONObject(jsonText); JSONArray arr = json.getJSONArray("sources"); 

Su arr se verá así: [{“id”: 1001, “nombre”: “jhon”}, {“id”: 1002, “nombre”: “jhon”}] Puede usar:

 arr.getJSONObject(index) 

para obtener los objetos dentro de la matriz.

Esta podría ser una respuesta a su pregunta:

 JSONArray msg1 = (JSONArray) json.get("source"); for(int i = 0; i < msg1.length(); i++){ String name = msg1.getString("name"); int age = msg1.getInt("age"); }