2013-08-13 10 views
7

इस स्ट्रिंग को jsonArray में सही तरीके से कैसे परिवर्तित करें?स्ट्रिंग को JsonArray में कनवर्ट करें

{ 
    "myArray": [ 
    { "id": 1, 
     "att1": 14.2, 
     "att2": false }, 
    { "id": 2, 
     "att1": 13.2, 
     "att2": false }, 
    { "id": 3, 
     "att1": 13, 
     "att2": false } 
    ]} 

एक JSONArray jArray = new JSONArray(STRING_FROM_ABOVE); परिणाम jArray.length = 1 इसकी मेरी पहली बार में json के साथ संपर्क में पाने के लिए :)

+0

स्ट्रिंग एक JSON ऑब्जेक्ट है, एक सरणी नहीं (बाहरी ब्रेसिज़ को नोट करें)। – Henry

उत्तर

10

इस प्रयास करें:

JSONObject jObject = new JSONObject(STRING_FROM_ABOVE); 
JSONArray jArray = jObject.getJSONArray("myArray"); 

"string_from_above" एक JSON सारणी नहीं है, यह एक JSON ऑब्जेक्ट है, एक विशेषता (myArray) जो एक JSON सारणी है युक्त;)

फिर आप क्या कर सकते हैं :

for (int i = 0; i < jArray.length(); i++) { 
     JSONObject jObj = jArray.getJSONObject(i); 
     System.out.println(i + " id : " + jObj.getInt("id")); 
     System.out.println(i + " att1 : " + jObj.getDouble("att1")); 
     System.out.println(i + " att2 : " + jObj.getBoolean("att2")); 
} 
+1

बहुत बहुत धन्यवाद ... मुझे वास्तव में जेसन और उनके वाक्यविन्यास के करीब देखना चाहिए :) – DieselPower

+0

कोई समस्या नहीं, उत्तर को स्वीकार करना न भूलें :) – Organ

+0

तो आप jArray [i] नहीं कह सकते हैं; है ना? – marciokoko

0

JQuery पर एक नज़र डालें, और विशेष रूप से पार्स कार्य करते हैं। यह एक ऑब्जेक्ट में सीधे जेसन ऐरे को पार्स करेगा।

+0

जेसन, वास्तव में !! – blackpanther

+0

स्वत: सुधार! वैसे भी यह ध्वन्यात्मक रूप से सही है। – PizzaTheHut

2

पार्सिंग करते समय, वस्तुओं और ArrayLists के मूल्यों को जोड़ें या फिर जिस तरह से आप इसका उपयोग करना चाहते हैं। सौभाग्य।

JSONObject jo = new JSONObject(STRING_FROM_ABOVE); 
JSONArray rootArray= jo.getJSONArray("myArray"); 
int rootArrayLength=rootArray.length(); 
for(int i=0;i<rootArrayLength;i++){ 
    int id= rootArray.getJSONObject(i).getInt("id"); 
    // do same for others too and create an object 
} 
// create object and make a list 
1

बस यहाँ मिश्रण में एक और तरीका फेंकने के लिए, मैं Gson पर एक नज़र लेने की सिफारिश करना चाहते हैं। जीसन एक पुस्तकालय है जो जावा ऑब्जेक्ट्स को क्रमबद्ध करने और deserialization बनाता है एक स्नैप। उदाहरण के लिए, अपने तार के साथ, आप ऐसा कर सकता है:

// Declare these somewhere that is on the classpath 
public class ArrayItem{ 
    public int id; 
    public double att1; 
    public boolean att2; 
} 

public class Container{ 
    public List<ArrayItem> myArray; 
} 

// In your code 
Gson gson = new Gson(); 

Container container = gson.fromJson(json, Container.class); 

for(ArrayItem item : container.myArray){ 
    System.out.println(item.id); // 1, 2, 3 
    System.out.println(item.att1); // 14.2, 13.2, 13.0 
    System.out.println(item.att2); // false, false, false 
} 

इसी तरह, आप पीछे की ओर बहुत आसानी से भी जा सकते हैं।

String jsonString = gson.toJson(container); 
// jsonString no contains something like this: 
// {"myArray":[{"id":1,"att1":14.2,"att2":false},{"id":2,"att1":13.2,"att2":false},{"id":3,"att1":13.0,"att2":false}]} 

प्राथमिक लाभ यह है कि कुछ Gson की तरह उपयोग करते हुए प्रदान करता है कि आप अब जावा के प्रकार की जाँच के सभी डिफ़ॉल्ट रूप से, बजाय विशेषता नामों और खुद के प्रकार को प्रबंधित करने का उपयोग कर सकते है। यह आपको कुछ फैंसी सामान भी करने की इजाजत देता है जैसे प्रतिकृति प्रकार पदानुक्रम जो बड़ी संख्या में जेसन संदेशों को एक स्नैप प्रबंधित करते हैं। यह एंड्रॉइड के साथ बहुत अच्छा काम करता है, और जार खुद छोटा है और किसी भी अतिरिक्त निर्भरता की आवश्यकता नहीं है।

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