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

disho6za  于 2023-04-18  发布在  Android
关注(0)|答案(5)|浏览(110)

我的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());

这就是我所得到的,我不知道如何循环第二个数组中的各个元素。

编辑:

这一行似乎只解析方括号中的第一个字符串:

JSONArray arrJSON = new JSONArray(sJSON);

要么JSON是错误的(与上面的例子相同),要么它没有正确地解析它?我已经设法解决了这个问题,对字符串进行了分割,并将它们分别放在自己的JSONArray中,但我不认为这是最好的方法。

aoyhnmkz

aoyhnmkz1#

你想要这样的东西。

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

4c8rllxm2#

你不应该使用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"); 
}
4urapxun

4urapxun3#

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

wz3gfoph

wz3gfoph4#

你可以使用Iterator进行迭代,我也复制了一个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);
      }
ozxc1zmp

ozxc1zmp5#

你也可以使用“for-of”/“for-in”循环:

if(jsonConfig.has("KEY")) {
    JSONArray jsonArray = jsonConfig.getJSONArray("KEY");

    for(var element : jsonArray) {
        // element has type `Object`
        String elementAsString = element.toString();

        // etc... change logic for conversion to different types
    }
}

相关问题