HTTP प्रतिक्रिया से JSON ऑब्जेक्ट प्राप्त करें


80

मैं एक प्राप्त करना चाहते हैं JSON एक Http से एक वस्तु प्रतिक्रिया प्राप्त करें:

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

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

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

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

@Zapnologica मेरे उत्तर की जाँच करें। इसके अलावा agen451 जवाब
रॉकस्टार

जवाबों:


67

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

यदि आप एक JSON वस्तु प्राप्त करने जा रहे हैं, तो आप बस डाल सकते हैं:

JSONObject myObject = new JSONObject(result);

क्या होगा अगर HttpExchange के मामले में ..?
हेमा

@ रेन बंदेइरा मैं अपने HTTP प्रतिक्रिया को एक जेन्स ऑब्जेक्ट में बदलने के लिए आपके कोड की कोशिश कर रहा हूं और मुझे यह त्रुटि मिल रही है Error:(47, 50) java: incompatible types: java.lang.StringBuffer cannot be converted to java.util.Map
क्रिस्टोस करापापास

@ कराप्पा आप अपना कोड दिखा सकते हैं? मेरा जवाब 2013 में था। मैं आपको अनुरोधों और Json क्रमांकन से निपटने के लिए रेट्रोफिट और गॉन / जैक्सन के रूप में कुछ का उपयोग करने की सलाह दूंगा।
रेनन बांदीरा

मैं इसे c # में कैसे असाइन कर सकता हूं?
फारुख सरमद

10

JSON पाने के लिए ऐसा करें

String json = EntityUtils.toString(response.getEntity());

यहाँ अधिक जानकारी: HttpResponse से json प्राप्त करें


33
यह एक स्ट्रिंग नहीं JSON है!
फ्रांसिस्को कॉर्लेस मोरेल्स

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

कम से कम यह ओपी के निम्न स्तर के ओवरहेड कोड से छुटकारा दिलाता है। अधिक पूर्ण समाधान के लिए नीचे @Catalin Pirvu की पोस्ट देखें।
सीज़र

9

यह आपके प्रश्न का सटीक उत्तर नहीं है, लेकिन इससे आपको मदद मिल सकती है

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

8

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

JSONObject jsonObj = new JSONObject("yourJsonString");

तब आप इस json ऑब्जेक्ट का उपयोग करके पुनः प्राप्त कर सकते हैं:

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

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

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;
}

आशा है कि यह आपकी मदद करेगा ..


हाय Apnologica .. अगर किसी भी उत्तर ने आपकी ज़रूरत को पूरा कर दिया, तो कृपया इसे स्वीकार करें ताकि दूसरों को आसानी से सही उत्तर तक पहुँचने में लाभ हो सके। साभार
सुशील

2

इस समस्या के पूर्ण समाधान के लिए (हाँ, मुझे पता है कि यह पोस्ट बहुत पहले मर गया था ...):

यदि आप एक चाहते हैं JSONObject, तो पहले एक Stringसे प्राप्त करें result:

String jsonString = EntityUtils.toString(response.getEntity());

तो आप अपने प्राप्त कर सकते हैं JSONObject:

JSONObject jsonObject = new JSONObject(jsonString);

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.