2012-01-22 35 views
7

Mi cadena JSON se parece a esto (contenida en una variable de cadena llamado sJSON):¿Cómo iterar esta matriz JSON utilizando Java y org.json en Android?

[ 
    {"id":284} 
], 
[ 
    {"name":John,"surname":Doe}, 
    {"name":Jane,"surname":Doe} 
] 

soy capaz de analizar la primera matriz como esta (usando Java y la importación de org.json):

JSONArray arrJSON = new JSONArray(sJSON); 
JSONObject jsonGeneralData = new JSONObject(arrJSON.get(0).toString()); 

String sResult = jsonGeneralData.get("id").toString(); 

Eso devuelve el resultado esperado, que es 284. Tengo dificultades para obtener la segunda serie de elementos y repetirlos. No estoy seguro de si mi cadena JSON está mal formada o si intento acceder a ella de la manera incorrecta. Esto es lo que he intentado:

JSONObject jsonPersonData = new JSONObject(arrJSON.get(1).toString()); 

Esto es por lo que yo tengo, no puedo encontrar la manera de recorrer los elementos individuales dentro de la segunda matriz.

EDIT:

Parece que esta línea sólo se analiza la primera cadena en los corchetes:

JSONArray arrJSON = new JSONArray(sJSON); 

O bien el JSON es incorrecto (mismo ejemplo anterior), o que no es el análisis es correcto? He logrado resolver el problema haciendo una división en la cadena y ponerlos cada uno en su propio JSONArray, pero no creo que esa sea la mejor manera de hacer las cosas.

+0

Actualizado el post original con más información. –

+0

Recursivo: https://gist.github.com/anonymous/89f8163fb22f77f4f9d3 –

Respuesta

20

quieres algo como esto ..

JSONArray jsonArray = new JSONArray(sJSON); 
JSONArray jsonPersonData = jsonArray.getJSONArray(1); 
for (int i=0; i<jsonPersonData.length(); i++) { 
    JSONObject item = jsonPersonData.getJSONObject(i); 
    String name = item.getString("name"); 
    String surname = item.getString("surname"); 
} 
3

Debe acceder a los datos utilizando el objeto arrJson, sin crear nuevos objetos JSON con los resultados de cadena de los mismos.

5

Usted no debería usar JSONObject.toString. Esta es la forma en que debe recorrer la matriz:

for(int i=0;i<arrJSON.length();i++){ 
JSONObject json_data = jArray.getJSONObject(i); 
String name =json_data.getString("name"); 
String surname =json_data.getString("surname"); 
} 
2

Se puede recorrer utilizando un iterador, también he copiado una cadena de ejemplo JSON para ti, espero que esto puede ayudar:

// { "drives": 
    //[{"drives_id":"2","ip":"hq10m.backupexample.com","port":"4010","ftp_username":"NameSFTP"," 
    // ftp_password":"12345","permission":2,"drive_name":"dev" 
    //,"drive_letter":"S","size":"1234","ma_mode":"0"}, 
    //{"drives_id":"3","ip":"hq6m.backupexample.com","port":"4206","ftp_username":"userSFTP" 
//,"ftp_password":"456","permission":2,"drive_name":"Rashtesting" 
//,"drive_letter":"P","size":"8","ma_mode":"0"}],"user_id":"8"} 

     mi.setUser_id((int) Long.parseLong(obj.get("user_id").toString())); 
     JSONArray drivesarray= (JSONArray) obj.get("drives"); 
     Iterator<JSONObject> driveIterator=drivesarray.iterator(); 
     while(driveIterator.hasNext()) 
     { 
      JSONObject driveJSON=driveIterator.next(); 
      client_drive_info drive=new client_drive_info(); 
      drive.setDrives_id((int) Long.parseLong(driveJSON.get("drives_id").toString())); 
      drive.setIp(driveJSON.get("ip").toString()); 
      drive.setPort((int)Long.parseLong(driveJSON.get("port").toString())); 
      drive.setSFTPusername(driveJSON.get("ftp_username").toString()); 
      drive.setSFTPpassword(driveJSON.get("ftp_password").toString()); 
      drive.setPermission((int)Long.parseLong(driveJSON.get("permission").toString())); 
      drive.setDrive_name(driveJSON.get("drive_name").toString()); 
      drive.setDrive_letter(driveJSON.get("drive_letter").toString()); 
      drive.setSize((int)Long.parseLong(driveJSON.get("size").toString())); 

      mi.getDrives_info().add(drive); 
     } 
+0

Es posible que desee considerar el uso de 'JSONObject.getString()'. – deed02392