Как выполнить итерацию этого массива JSON с помощью Java и org.в JSON в Android?
моя строка JSON выглядит так (содержится в строковой переменной sJSON
):
[
{"id":284}
],
[
{"name":John,"surname":Doe},
{"name":Jane,"surname":Doe}
]
Я могу разобрать первый массив следующим образом (используя Java и импортируя org.в JSON):
JSONArray arrJSON = new JSONArray(sJSON);
JSONObject jsonGeneralData = new JSONObject(arrJSON.get(0).toString());
String sResult = jsonGeneralData.get("id").toString();
это возвращает ожидаемый результат, который составляет 284. Я изо всех сил пытаюсь получить второй массив элементов и перебирать их. Я не уверен, что моя строка JSON искажена или я пытаюсь получить к ней неправильный доступ. Вот что я попробовал:
JSONObject jsonPersonData = new JSONObject(arrJSON.get(1).toString());
это насколько я понял, я не могу понять, как перебирать отдельные элементы внутри второго массива.
EDIT:
кажется, что эта строка анализирует только первую строку в квадратных скобках:
JSONArray arrJSON = new JSONArray(sJSON);
либо JSON ошибочен (тот же пример, что и выше), либо он не анализирует его правильно? Мне удалось решить проблему, сделав разделение на строке и поместив их каждый в свой JSONArray
, но я не думаю, что это лучший способ делать вещи.
4 ответов
вы хотите что-то вроде этого..
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
object, не создавая новые JSONObjects со строковыми результатами из них.
вы можете перебирать с помощью итератора, я также скопировал образец строки JSON для вас, я надеюсь, что это может помочь:
// { "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);
}