2013-06-19 7 views
6

मैं HTTP प्रतिक्रिया से JSONObject प्राप्त करने का प्रयास कर रहा था।जावा में JSON के रूप में HTTPResponse

try 
    { 
     GetMethod postMethod = new GetMethod(); 
     postMethod.setURI(new URI(url, true)); 
     postMethod.setRequestHeader("Accept", "application/json"); 
     httpClient.executeMethod(postMethod); 
     String resp=postMethod.getResponseBodyAsString(); 
     org.json.JSONTokener tokener = new org.json.JSONTokener(resp); 
     finalResult = new org.json.JSONArray(tokener); 

     return finalResult; 
    } 

लेकिन मैं

बड़े या अज्ञात आकार के बफ़र के जवाब शरीर जा रहे हैं के रूप में एक क्रम चेतावनी मिल गया। इसके बजाय getResponseBodyAsStream का उपयोग करने की अनुशंसा की जाती है।

क्या मुझे JVM द्वारा सुझाए गए स्ट्रीम के रूप में प्रतिक्रिया मिलनी चाहिए? यदि हां, तो मैं JSON को कैसे पार्स कर सकता हूं?

+2

पक्ष बस, एक 'बाइट []' करने के लिए सामग्री को पढ़ने की बारी है कि 'बाइट []' और एक 'स्ट्रिंग' (एन्कोडिंग के आधार पर) में पार्स कि' स्ट्रिंग' JSON – fge

+0

के रूप में मुझे आशा है कि जावा के लिए कई दर्जन JSON पैकेजों में से एक सीधे स्ट्रीम से पढ़ सकता है। –

उत्तर

1

आप सर्वर लगता है (बिल्ला सर्वर)

से jsonObjects भेजने के लिए सर्वर पक्ष

बनाने jsonobjects के लिए चाहते हैं -

मैं jsonobjects इस बनाने के लिए कहा जाता है toJson() है कार्यान्वयन है

final JSONObject arr = new JSONObject(); 

for (int i = 0; i < contactStatus.size(); i++) { 
    ContactStatus contactObject = contactStatus.get(i); 

    try { 
     arr.put(String.valueOf(i), toJson(value1, value2,, value3)); 
    } catch (JSONException e) { 

    catch block e.printStackTrace(); 
    } 
} 

//Here we serialize the stream to a String. 
final String output = arr.toString(); 
response.setContentLength(output.length()); 
out.print(output);//out is object of servlet output stream. 

public static Object toJsonForContact(String value1, boolean value2, double value3) throws JSONException { 

    JSONObject contactObject = new JSONObject(); 
    contactObject.put("id", id); 
    contactObject.put("status", value1); 
    contactObject.put("distance", value2); 
    contactObject.put("relation", value3); 
    return contactObject; 
} 

तो आपके jsonobjects भेजने के लिए तैयार हैं हम इन वस्तुओं को ServletoutputStream पर लिखते हैं।

ग्राहक में

while ((ReadResponses = in.readLine()) != null) { 
     Constants.Response_From_server = ReadResponses; 

     if (Constants.Response_From_server.startsWith("{")) { 
      ListOfContactStatus = new ArrayList<ContactStatus>(); 
      ContactStatus contactStatusObject; 

      try { 
       JSONObject json = new JSONObject(Constants.Response_From_server); 

       for (int i = 0; i < json.length(); i++) { 
        contactStatusObject = new ContactStatus(); 

        JSONObject json1 = json.getJSONObject(String.valueOf(i)); 
        System.out.println("" + json1.getString("id")); 
        System.out.println("" + json1.getBoolean("status")); 
        System.out.println("" + json1.getDouble("distance")); 

        contactStatusObject.setId(json1.getString("id")); 
        contactStatusObject.setStatus(json1.getBoolean("status")); 
        contactStatusObject.setDistance((float) json1.getDouble("distance")); 
        ListOfContactStatus.add(contactStatusObject); 
        System.out.println("HTTPTransport:sendMessage Size of ListOfContactStatus" + ListOfContactStatus.size()); 
       } 
      } catch (JSONException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
    } 
} 
3

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

1

आप जेएसओऑब्जेक्ट usin जावा ईई 7 उत्पन्न कर सकते हैं नमूना कोड।

JsonReader reader = Json.createReader(new URI(url, true)); 
    JsonObject jsonObject=reader.readObject(); 

विवरण जानकारी के लिए लिंक पर जाएं। http://docs.oracle.com/javaee/7/tutorial/doc/jsonp003.htm#BABHAHIA

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