Come eseguire l'iterazione di questo JSON Array utilizzando Java e org.json in Android?

La mia string JSON sembra così (contenuta in una variabile string denominata sJSON ):

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

Sono in grado di analizzare la prima matrix come questa (utilizzando Java e importndo org.json):

  • Aggiunta di intestazione a tutte le richieste con Retrofit 2
  • Come eseguire la cache / salvare l'object di class personalizzata in Android?
  • Android Studio: UNEXPECTED TOP-LEVEL EXCEPTION:
  • Creazione di LinearLayout in Java - Elementi non vengono visualizzati
  • Youtube data API: Ottenete l'accesso al stream multimediale e al gioco (JAVA)
  • Utilizzando la class GLSurfaceView con i layout xml android
  •  JSONArray arrJSON = new JSONArray(sJSON); JSONObject jsonGeneralData = new JSONObject(arrJSON.get(0).toString()); String sResult = jsonGeneralData.get("id").toString(); 

    Questo restituisce il risultato atteso, che è 284. Sto cercando di get la seconda serie di elementi e di iterare attraverso di essi. Non sono sicuro se la mia string JSON è malformata o se sto cercando di accedere al modo sbagliato. Ecco cosa ho provato:

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

    Questo è quanto ho ottenuto, non riesco a capire come cercare i singoli elementi all'interno della seconda matrix.

    EDIT:

    Sembra che questa linea analizza solo la prima string nelle parentesi quadre:

     JSONArray arrJSON = new JSONArray(sJSON); 

    O il JSON è errato (lo stesso esempio come sopra), o non lo sta parlando correttamente? Sono riuscito a risolvere il problema facendo una spaccatura sulla string e mettendole ognuna nel loro JSONArray , ma non credo che sia il modo migliore per fare le cose.

    4 Solutions collect form web for “Come eseguire l'iterazione di questo JSON Array utilizzando Java e org.json in Android?”

    Volete qualcosa di simile.

     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"); } 

    Non dovrai usare JSONObject.toString. Questo è il modo in cui si dovrebbe ripetere la tua matrix:

     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"); } 

    Dovresti accedere ai dati utilizzando l'object di arrJson , non creando nuovi JSONObjects con i risultati della string.

    Puoi ingannare utilizzando un Iterator, ho anche copiato una string JSON di esempio per te, spero che questo possa aiutare:

      // { "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 drivesarrays= (JSONArray) obj.get("drives"); Iterator<JSONObject> driveIterator=drivesarrays.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); } 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.