2011-06-10 18 views
7

पार्सिंग JSON में पार्सिंग JSON स्ट्रिंग लगता है ऐसा लगता है कि यहाँ पर चर्चा का एक बहुत आम विषय है। मैंने चारों ओर देखा है और अभी भी वह नहीं मिला है जिसे मैं ढूंढ रहा हूं। यहाँ मैं उपयोग कर रहा हूँ एक HttpClient किसी सर्वर के लिए एक JSON अनुरोध भेजने के लिए मेरी HttpClientएंड्रॉयड

public class CreateJsonRequest { 


    public static String SendJsonRequest(String URL, Map<String,Object> params){ 
      try{ 
       DefaultHttpClient httpClient = new DefaultHttpClient(); 
       HttpPost httpPost = new HttpPost(URL); 

       JSONObject holder = new JSONObject(); 

       for (Map.Entry<String, Object> m : params.entrySet()){ 
        try { 
         holder.put(m.getKey(), m.getValue()); 
        } 
        catch (JSONException e) { 
         Log.e("Hmmmm", "JSONException : "+e); 
        } 
       } 
       StringEntity se; 
       se = new StringEntity(holder.toString()); 

       httpPost.setEntity(se); 
       httpPost.setHeader("Accept", "text/json"); 
       httpPost.setHeader("Content-type", "text/json"); 

       HttpResponse response = httpClient.execute(httpPost); 
       HttpEntity entity = response.getEntity(); 

       if(entity != null){ 
        final JSONObject respObject = new JSONObject(EntityUtils.toString(entity)); 
        String result = respObject.toString();  
        parseJSON(result); 

के लिए मेरे कोड है। सर्वर तब JSON में एक प्रतिक्रिया देता है। यह बहुत अच्छा काम करता है। अब वह जगह है जहां मैं परेशानी में भाग रहा हूं। मैं सर्वर से एक HttpEntity प्राप्त कर रहा। मैं फिर इसे एक स्ट्रिंग में बदल रहा हूं जो इस तरह दिखता है। {"Make":"Ford","Year": 1975, "Model":"Mustang"} मैं अपने parseJSON(String jString) विधि को यह स्ट्रिंग भेजने के लिए सक्षम होना चाहते हैं और यह एक महत्वपूर्ण मूल्य नक्शे को वापस। मैं कहां से यह अन्य पदों से अलग लगता है कि मैं पार्स विधि किसी भी JSON स्ट्रिंग मैं इसे भेजने के लिए एक महत्वपूर्ण मूल्य नक्शा बनाने के लिए सक्षम होने के लिए चाहते हैं। तो अगर मैंने इसे {"Engine":"v8","Cylinders": 8, "Transmission":"Manual","Gears": 4} भेजा है तो यह अभी भी काम करेगा। क्या यह करने योग्य है? और यदि हां, तो क्या आप मुझे सही दिशा में कुछ नजदीक दे सकते हैं?

+0

गूगल के GSON पुस्तकालय, इसके भयानक उपयोग करने का प्रयास! – binnyb

+0

यह 'एंड्रॉइड' नहीं है, है ना? या क्या मैं कुछ न कुछ भूल रहा हूं? ऐसा लगता है कि आप इसे एंड्रॉइड ऐप में इस्तेमाल करते हैं। – keyser

उत्तर

20

इस मामले में आप JSONObject वर्ग के keys विधि का उपयोग कर सकते हैं। यह मूल रूप से चाबियों का एक Iterator रिटर्न जाएगा, कि तुम तो हो जाते हैं और एक नक्शे में मूल्यों डाल करने के लिए पुनरावृति कर सकते हैं:

try { 
    JSONObject jsonObject = new JSONObject(theJsonString); 
    Iterator keys = jsonObject.keys(); 
    Map<String, String> map = new HashMap<String, String>(); 
    while (keys.hasNext()) { 
     String key = (String) keys.next(); 
     map.put(key, jsonObject.getString(key)); 
    } 
    System.out.println(map);// this map will contain your json stuff 
} catch (JSONException e) { 
    e.printStackTrace(); 
} 
+0

आह ... मैंने इसके बारे में भी सोचा नहीं था। मैंने देखा सभी उदाहरण ज्ञात कुंजी का उपयोग कर रहे थे ... हाँ कि काम करना चाहिए। मैं इसे थोड़ा सा कोशिश करूंगा। धन्यवाद! –

+0

पूरी तरह से काम किया। आपका बहुत बहुत धन्यवाद। –

+0

@ michaelw2608 - उसे एक उपरोक्त के साथ धन्यवाद ... – tpow

1

ध्यान दें कि Jackson दो JSON उदाहरणों में से एक बहुत बस deserialize कर सकते हैं।

ObjectMapper mapper = new ObjectMapper(); 
Map<String, Object> values = mapper.readValue(theJsonString, Map.class); 

Gson यह इसी तरह बस एक Map<String, Object> के बजाय क्या कर सकते हैं अगर आप एक Map<String, String> से संतुष्ट हैं तो। वर्तमान में, जीसन को Map<String, Object> के लिए कस्टम deserialization की आवश्यकता होगी।