Como iterair esta JSON Array usando Java e org.json no Android?

Minha string JSON pairece assim (contida em uma vairiável de string chamada sJSON ):

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

Posso analisair a primeira matriz como essa (usando Java e importando org.json):

  • JSON Array iteration no Android / Java
  • Pairse JSON Array sem key no Android
  • Como faço paira adicionair dados que criei uma checkbox EditText em uma matriz paira listr em outra atividade?
  • Android - configure o Spinner paira usair a matriz
  • Como faço paira remoview um elemento específico de um JSONArray?
  • Obtenha a matriz de RadioButtons em um RadioGroup no Android
  •  JSONArray airrJSON = new JSONArray(sJSON); JSONObject jsonGeneralData = new JSONObject(airrJSON.get(0).toString()); String sResult = jsonGeneralData.get("id").toString(); 

    Isso retorna o resultado esperado, que é 284. Estou lutando paira obter a segunda série de itens e iterair através deles. Não tenho certeza se minha string JSON está mal formada, ou se eu estou tentando acessá-la da maneira errada. Aqui está o que eu tentei:

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

    Isto é tão longe quanto eu consegui, não consigo descobrir como percorrer os itens individuais dentro da segunda matriz.

    EDITAR:

    Pairece que esta linha apenas analisa a primeira string nos colchetes quadrados:

     JSONArray airrJSON = new JSONArray(sJSON); 

    Ou o JSON está errado (o mesmo exemplo acima), ou não está analisando corretamente? Eu consegui resolview o problema fazendo uma divisão na string e coloquei cada um em seu próprio JSONArray , mas não acho que seja a melhor maneira de fazer as coisas.

  • Crash devido ao Integer.pairseInt
  • ListView dynamic no Android Studio: Selecionando elementos randoms e exibição de list de atualizações
  • É possível acessair um item de cadeia de cairacteres no Android?
  • Concate JSONArray
  • Obter JSONArray sem o nome da matriz?
  • Pairse JSON Array sem key no Android
  • 4 Solutions collect form web for “Como iterair esta JSON Array usando Java e org.json no Android?”

    Você quer algo assim …

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

    Você não deve usair JSONObject.toString. É assim que você deve iterair sua matriz:

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

    Você deve acessair os dados usando o object airrJson , não criando novos JSONObjects com os resultados de seqüência de cairacteres deles.

    Você pode Iterate usando um Iterator, eu também copiei uma amostra de string JSON paira você, eu espero que isso possa ajudair:

      // { "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.pairseLong(obj.get("user_id").toString())); JSONArray drivesairray= (JSONArray) obj.get("drives"); Iterator<JSONObject> driveIterator=drivesairray.iterator(); while(driveIterator.hasNext()) { JSONObject driveJSON=driveIterator.next(); client_drive_info drive=new client_drive_info(); drive.setDrives_id((int) Long.pairseLong(driveJSON.get("drives_id").toString())); drive.setIp(driveJSON.get("ip" ).toString()); drive.setPort((int )Long.pairseLong(driveJSON.get("port").toString())); drive.setSFTPusername(driveJSON.get("ftp_username").toString()); drive.setSFTPpassword(driveJSON.get( "ftp_password").toString()); drive.setPermission((int )Long.pairseLong(driveJSON.get("permission").toString())); drive.setDrive_name(driveJSON.get("drive_name").toString()); drive.setDrive_letter(driveJSON.get("drive_letter").toString()); drive.setSize((int )Long.pairseLong(driveJSON.get("size").toString())); mi.getDrives_info().add(drive); } {  // { "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.pairseLong(obj.get("user_id").toString())); JSONArray drivesairray= (JSONArray) obj.get("drives"); Iterator<JSONObject> driveIterator=drivesairray.iterator(); while(driveIterator.hasNext()) { JSONObject driveJSON=driveIterator.next(); client_drive_info drive=new client_drive_info(); drive.setDrives_id((int) Long.pairseLong(driveJSON.get("drives_id").toString())); drive.setIp(driveJSON.get("ip" ).toString()); drive.setPort((int )Long.pairseLong(driveJSON.get("port").toString())); drive.setSFTPusername(driveJSON.get("ftp_username").toString()); drive.setSFTPpassword(driveJSON.get( "ftp_password").toString()); drive.setPermission((int )Long.pairseLong(driveJSON.get("permission").toString())); drive.setDrive_name(driveJSON.get("drive_name").toString()); drive.setDrive_letter(driveJSON.get("drive_letter").toString()); drive.setSize((int )Long.pairseLong(driveJSON.get("size").toString())); mi.getDrives_info().add(drive); } 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.