2012-01-22 23 views
7

chuỗi JSON của tôi trông như thế này (chứa trong một biến chuỗi gọi sJSON):Làm thế nào để lặp lại mảng JSON này bằng cách sử dụng Java và org.json trong Android?

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

tôi có thể phân tích các mảng đầu tiên như thế này (sử dụng Java và nhập khẩu org.json):

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

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

Điều đó trả về kết quả mong đợi, là 284. Tôi đang cố gắng để có được mảng thứ hai của các mục và lặp qua chúng. Tôi không chắc liệu chuỗi JSON của tôi có bị thay đổi hay không, hoặc nếu tôi đang cố truy cập nó theo cách sai. Dưới đây là những gì tôi đã thử:

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

Đây là như tôi nhận được, tôi không thể tìm ra cách lặp qua các mục riêng lẻ trong mảng thứ hai.

EDIT:

Dường như dòng này chỉ phân tích các chuỗi đầu tiên trong dấu ngoặc vuông:

JSONArray arrJSON = new JSONArray(sJSON); 

Hoặc là JSON là sai (giống ví dụ như trên), hoặc nó không phân tích cú pháp nó đúng không? Tôi đã xoay sở để giải quyết vấn đề bằng cách chia nhỏ chuỗi ký tự và đặt chúng vào mỗi JSONArray của riêng chúng, nhưng tôi không nghĩ đó là cách tốt nhất để làm việc.

+0

Cập nhật các bài bản gốc với nhiều thông tin hơn. –

+0

Mục đệ quy: https://gist.github.com/anonymous/89f8163fb22f77f4f9d3 –

Trả lời

20

Bạn muốn một cái gì đó như thế này ..

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

Bạn nên truy cập dữ liệu bằng cách sử dụng đối tượng arrJson, không tạo JSONObject mới với kết quả chuỗi của chúng.

5

Bạn shoul không sử dụng JSONObject.toString. Đây là cách bạn nên lặp mảng của bạn:

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

Bạn có thể Lặp lại sử dụng một Iterator, tôi cũng sao chép một chuỗi mẫu JSON cho bạn, tôi hy vọng điều này có thể giúp:

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

Bạn có thể muốn xem xét sử dụng 'JSONObject.getString()'. – deed02392

Các vấn đề liên quan