如何在Android中使用Java和org.json迭代这个JSON数组?

我的JSONstring看起来像这样(包含在名为sJSON的stringvariables中):

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

我能够像这样parsing第一个数组(使用Java并导入org.json):

 JSONArray arrJSON = new JSONArray(sJSON); JSONObject jsonGeneralData = new JSONObject(arrJSON.get(0).toString()); String sResult = jsonGeneralData.get("id").toString(); 

这将返回预期的结果,这是284.我努力获得第二个数组项,并遍历它们。 我不确定我的JSONstring是否格式不正确,或者如果我试图以错误的方式访问它。 这是我的尝试:

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

这是据我所知,我不知道如何循环通过第二个数组内的单个项目。

编辑:

看来这行只parsing方括号中的第一个string:

 JSONArray arrJSON = new JSONArray(sJSON); 

或者JSON是错误的(与上面相同的例子),或者它不能正确parsing它? 我已经设法通过对string进行拆分来解决问题,并将它们分别放在自己的JSONArray ,但是我不认为这是做事的最佳方式。

Related of "如何在Android中使用Java和org.json迭代这个JSON数组?"

你想要这样的东西

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

你不使用JSONObject.toString。 这是你应该如何迭代你的数组:

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

您应该使用arrJson对象访问数据,而不是使用它们的string结果创build新的JSONObjects。

你可以迭代使用迭代器,我也复制了一个样本JSONstring给你,我希望这可以帮助:

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