How to iterate this JSON Array using Java and org.

2020-03-12 08:23发布

My JSON string looks like this (contained in a string variable called sJSON):

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

I'm able to parse the first array like this (using Java and importing org.json):

JSONArray arrJSON = new JSONArray(sJSON);
JSONObject jsonGeneralData = new JSONObject(arrJSON.get(0).toString());

String sResult = jsonGeneralData.get("id").toString();

That returns the expected result, which is 284. I'm struggling to get the second array of items, and iterate through them. I'm not sure if my JSON string is malformed, or if I'm trying to access it the wrong way. Here's what I tried:

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

This is as far as I got, I can't figure out how to loop through the individual items inside the second array.

EDIT:

It seems that this line only parses the first string in the square brackets:

JSONArray arrJSON = new JSONArray(sJSON);

Either the JSON is wrong (same example as above), or it's not parsing it correctly? I've managed to solve the problem by doing a split on the string and put them each in their own JSONArray, but I don't think that's the best way of doing things.

4条回答
我只想做你的唯一
2楼-- · 2020-03-12 08:39

You want something like this..

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");
}
查看更多
ら.Afraid
3楼-- · 2020-03-12 08:39

You can Iterate using an Iterator, I have also copied a sample JSON string for you, I hope this can help:

  //  { "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);
      }
查看更多
Animai°情兽
4楼-- · 2020-03-12 08:41

You should access the data using the arrJson object, not creating new JSONObjects with the string results of them.

查看更多
啃猪蹄的小仙女
5楼-- · 2020-03-12 08:48

You shoul not use JSONObject.toString. This is how you should iterate your array:

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"); 
}
查看更多
登录 后发表回答