2013-08-06 12 views
49

मैं एक प्रतिक्रिया HTTP GET से एक JSON वस्तु प्राप्त करना चाहते हैं से एक JSON ऑब्जेक्ट प्राप्त करें:HTTP उत्तर

यहाँ के लिए मेरे वर्तमान कोड है HTTP GET:

protected String doInBackground(String... params) { 

    HttpClient client = new DefaultHttpClient(); 
    HttpGet request = new HttpGet(params[0]); 
    HttpResponse response; 
    String result = null; 
    try { 
     response = client.execute(request);   
     HttpEntity entity = response.getEntity(); 

     if (entity != null) { 

      // A Simple JSON Response Read 
      InputStream instream = entity.getContent(); 
      result = convertStreamToString(instream); 
      // now you have the string representation of the HTML request 
      System.out.println("RESPONSE: " + result); 
      instream.close(); 
      if (response.getStatusLine().getStatusCode() == 200) { 
       netState.setLogginDone(true); 
      } 

     } 
     // Headers 
     org.apache.http.Header[] headers = response.getAllHeaders(); 
     for (int i = 0; i < headers.length; i++) { 
      System.out.println(headers[i]); 
     } 
    } catch (ClientProtocolException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } catch (IOException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 
    return result; 
} 

यहाँ convertSteamToString समारोह है :

private static String convertStreamToString(InputStream is) { 

    BufferedReader reader = new BufferedReader(new InputStreamReader(is)); 
    StringBuilder sb = new StringBuilder(); 

    String line = null; 
    try { 
     while ((line = reader.readLine()) != null) { 
      sb.append(line + "\n"); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally { 
     try { 
      is.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
    return sb.toString(); 
} 

अभी मुझे एक स्ट्रिंग ऑब्जेक्ट मिल रहा है। मैं JSON ऑब्जेक्ट को वापस कैसे प्राप्त कर सकता हूं।

+1

आप अपने परिणाम स्ट्रिंग में क्या प्राप्त कर रहे हैं? – R4chi7

+0

और आप प्रतिक्रिया का उपयोग क्यों कर रहे हैं .getEntity() दो बार? – R4chi7

+0

एक JSON ऑब्जेक्ट वापस पाने के लिए आप जिस JServer को कनेक्ट करते हैं उसे वापस जेएसओएन भेजने के लिए कनेक्ट करते हैं? क्या ऐसा करता है? – rockstar

उत्तर

48

आपको जो स्ट्रिंग मिलती है वह केवल JSON ऑब्जेक्ट .toString() है। इसका मतलब है कि आपको JSON ऑब्जेक्ट मिलता है, लेकिन स्ट्रिंग प्रारूप में।

आप एक JSON वस्तु प्राप्त करने के लिए अपेक्षा की जाती है, तो आप सिर्फ रख सकते हैं:

JSONObject myObject = new JSONObject(result); 
+0

क्या होगा यदि HttpExchange .. के मामले में? – Hema

3

आप नीचे दिए गए जैसे JSONObject उपयोग करने की आवश्यकता:

String mJsonString = downloadFileFromInternet(urls[0]); 

JSONObject jObject = null; 
try { 
    jObject = new JSONObject(mJsonString); 
} 
catch (JSONException e) { 
    e.printStackTrace(); 
    return false; 
} 

...

private String downloadFileFromInternet(String url) 
{ 
    if(url == null /*|| url.isEmpty() == true*/) 
     new IllegalArgumentException("url is empty/null"); 
    StringBuilder sb = new StringBuilder(); 
    InputStream inStream = null; 
    try 
    { 
     url = urlEncode(url); 
     URL link = new URL(url); 
     inStream = link.openStream(); 
     int i; 
     int total = 0; 
     byte[] buffer = new byte[8 * 1024]; 
     while((i=inStream.read(buffer)) != -1) 
     { 
      if(total >= (1024 * 1024)) 
      { 
       return ""; 
      } 
      total += i; 
      sb.append(new String(buffer,0,i)); 
     } 
    } 
    catch(Exception e) 
    { 
     e.printStackTrace(); 
     return null; 
    }catch(OutOfMemoryError e) 
    { 
     e.printStackTrace(); 
     return null; 
    } 
    return sb.toString(); 
} 

private String urlEncode(String url) 
{ 
    if(url == null /*|| url.isEmpty() == true*/) 
     return null; 
    url = url.replace("[",""); 
    url = url.replace("]",""); 
    url = url.replaceAll(" ","%20"); 
    return url; 
} 

उम्मीद है कि यह आपकी मदद करता है ..

+0

हाय अपोनोलिका भी देखें .. यदि किसी भी उत्तर में आपकी ज़रूरतों को पूरा किया गया है, तो कृपया इसे स्वीकार करें ताकि दूसरों को आसानी से उत्तर देने में आसानी प्राप्त हो सके। धन्यवाद – Sushil

6

अपने सटीक JSON उत्पादन पर एक नज़र के बिना, यह आप कुछ काम कर कोड देने के लिए मुश्किल है। This ट्यूटोरियल बहुत उपयोगी है, लेकिन आप की तर्ज पर कुछ इस्तेमाल कर सकते हैं: का उपयोग कर

JSONObject jsonObj = new JSONObject("yourJsonString"); 

तो फिर तुम इस json वस्तु से प्राप्त कर सकते हैं:

String value = jsonObj.getString("yourKey"); 
+0

बहुत अच्छा ट्यूटोरियल। "आम तौर पर सभी जेएसओएन नोड्स स्क्वायर ब्रैकेट या घुंघराले ब्रैकेट के साथ शुरू होंगे। [और {के बीच का अंतर, वर्ग ब्रैकेट ([) एक JSONArray नोड से शुरू होता है जबकि घुंघराले ब्रैकेट ({) JSONObject का प्रतिनिधित्व करता है। इन नोड्स तक पहुंचने के लिए हमें डेटा तक पहुंचने के लिए उचित विधि कॉल करने की आवश्यकता है। यदि आपका JSON नोड प्रारंभ होता है [, तो हमें getJSONArray() विधि का उपयोग करना चाहिए। जैसे कि नोड {के साथ शुरू होता है, तो हमें getJSONObject() विधि का उपयोग करना चाहिए। " – another

6

यह अपने प्रश्न के लिए सटीक उत्तर नहीं है, लेकिन यह आप

public class JsonParser { 

    private static DefaultHttpClient httpClient = ConnectionManager.getClient(); 

    public static List<Club> getNearestClubs(double lat, double lon) { 
     // YOUR URL GOES HERE 
     String getUrl = Constants.BASE_URL + String.format("getClosestClubs?lat=%f&lon=%f", lat, lon); 

     List<Club> ret = new ArrayList<Club>(); 

     HttpResponse response = null; 
     HttpGet getMethod = new HttpGet(getUrl); 
     try { 
      response = httpClient.execute(getMethod); 

      // CONVERT RESPONSE TO STRING 
      String result = EntityUtils.toString(response.getEntity()); 

      // CONVERT RESPONSE STRING TO JSON ARRAY 
      JSONArray ja = new JSONArray(result); 

      // ITERATE THROUGH AND RETRIEVE CLUB FIELDS 
      int n = ja.length(); 
      for (int i = 0; i < n; i++) { 
       // GET INDIVIDUAL JSON OBJECT FROM JSON ARRAY 
       JSONObject jo = ja.getJSONObject(i); 

       // RETRIEVE EACH JSON OBJECT'S FIELDS 
       long id = jo.getLong("id"); 
       String name = jo.getString("name"); 
       String address = jo.getString("address"); 
       String country = jo.getString("country"); 
       String zip = jo.getString("zip"); 
       double clat = jo.getDouble("lat"); 
       double clon = jo.getDouble("lon"); 
       String url = jo.getString("url"); 
       String number = jo.getString("number"); 

       // CONVERT DATA FIELDS TO CLUB OBJECT 
       Club c = new Club(id, name, address, country, zip, clat, clon, url, number); 
       ret.add(c); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     // RETURN LIST OF CLUBS 
     return ret; 
    } 

} 
Again, it’s relatively straight forward, but the methods I’ll make special note of are: 

JSONArray ja = new JSONArray(result); 
JSONObject jo = ja.getJSONObject(i); 
long id = jo.getLong("id"); 
String name = jo.getString("name"); 
double clat = jo.getDouble("lat"); 
+0

यह shld मदद। – rockstar

17

मदद मिल सकती है इस JSON

पाने के लिए करते हैं

अधिक जानकारी यहां: get json from HttpResponse

+17

जो एक * स्ट्रिंग * एक JSON नहीं है! –

+4

इसमें इतने सारे अपवॉट क्यों हैं? यह सिर्फ एक 'toString है() 'फ़ंक्शन - मूल रूप से ओपी कर रहा है वही वही बात। – cst1992

+1

कृपया गलत है क्योंकि यह गलत है –

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