2012-01-22 10 views
7

मेरे JSON स्ट्रिंग इस तरह दिखता है (एक स्ट्रिंग चर में निहित कहा जाता sJSON):एंड्रॉइड में जावा और org.json का उपयोग करके इस JSON ऐरे को फिर से कैसे करें?

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

मैं इस (जावा का उपयोग कर और 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 में रखा है, लेकिन मुझे नहीं लगता कि यह चीजों को करने का सबसे अच्छा तरीका है।

+0

मूल पोस्ट अपडेट किया गया इस तरह आप अपने सरणी पुनरावृति चाहिए अधिक जानकारी के साथ। –

+0

रिकर्सिव एक: https://gist.github.com/anonymous/89f8163fb22f77f4f9d3 –

उत्तर

20

आप कुछ इस तरह चाहते हैं ..

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

आपको arrJson ऑब्जेक्ट का उपयोग करके डेटा तक पहुंचना चाहिए, न कि उनके JSONObjects को स्ट्रिंग परिणामों के साथ न बनाएं।

5

आप JSONObject.toString का उपयोग नहीं shoul।

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

आप एक इटरेटर का उपयोग कर दोहराएं, मैं भी एक नमूना 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); 
     } 
+0

आप 'JSONObject.getString() 'का उपयोग करने पर विचार करना चाहेंगे। – deed02392

संबंधित मुद्दे