2013-06-19 13 views
6

Próbowałem uzyskać JSONObject z odpowiedzi HTTP.HTTPResponse jako JSON w Javie

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

Ale mam ostrzeżenie wykonania jako

Przechodzenie do bufora ciało reakcja dużej lub nieznanym rozmiarze. Zalecane jest użycie getResponseBodyAsStream.

Czy powinienem otrzymać odpowiedź w postaci strumienia sugerowanego przez JVM? Jeśli tak, to jak mogę przeanalizować JSON?

+2

Wystarczy przeczytać zawartość do 'byte []', 'kolei, że bajt []' na 'String' (w zależności od kodowania) i analizować że' String' jako JSON – fge

+0

Mam nadzieję, że jeden z kilkudziesięciu pakietów JSON dla Javy może czytać bezpośrednio ze strumienia. –

Odpowiedz

1

jeśli chcesz wysłać jsonObjects z serwera przypuszczam (serwer Tomcat)

dla serwera stronie-

tworzenia jsonobjects -

nazwałem toJson() do tworzenia jsonobjects ten jest implementation-

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

, więc twoje jsonobjects są gotowe do wysłania, piszemy te obiekty do ServletoutputStream.

klient ubocznych

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

Czy twój serwer został skonfigurowany tak, aby informować klientów o tym, jak duże są jego odpowiedzi? Jeśli nie, serwer przesyła dane strumieniowo i technicznie niemożliwe jest określenie, ile przestrzeni buforowej jest potrzebne, aby poradzić sobie z odpowiedzią, uzasadniając ostrzeżenie, że dzieje się coś potencjalnie niebezpiecznego.