簡體   English   中英

如何在Android中使用Java和org.json迭代這個JSON數組?

[英]How to iterate this JSON Array using Java and org.json in 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());

這是我得到的,我無法弄清楚如何循環第二個數組內的單個項目。

編輯:

看來這行只解析方括號中的第一個字符串:

JSONArray arrJSON = new JSONArray(sJSON);

JSON是錯誤的(與上面相同的例子),還是它沒有正確解析它? 我已經設法通過對字符串進行拆分並將它們分別放在自己的JSONArray來解決問題,但我認為這不是最好的做事方式。

你想要這樣的東西..

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對象訪問數據,而不是使用它們的字符串結果創建新的JSONObject。

您可以使用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);
      }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM