2013-06-19 15 views
6

Stavo cercando di ottenere un oggetto JSONObject da una risposta HTTP.HTTPResponse come JSON in Java

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

Ma ho avuto un avvertimento runtime come

Andando per tamponare corpo della risposta di grandi dimensioni o sconosciuto. Si consiglia invece di utilizzare getResponseBodyAsStream.

Devo ottenere la risposta come flusso come suggerito dalla JVM? Se è così, come potrei analizzare il JSON da esso?

+2

Basta leggere il contenuto di un 'byte []', 'trasformare quel byte []' 'in uno STRING' (a seconda della codifica) e analizzare che' STRING' come JSON – fge

+0

Spero che una delle decine di pacchetti JSON per Java possano leggere direttamente da un flusso. –

risposta

1

se si desidera inviare jsonObjects dal server supporre (server Tomcat)

Per il server lato-

creando jsonobjects -

che ho chiamato per la creazione di toJson()jsonobjects questa è la specifica di esecuzione

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

quindi il tuo jsonobjects è pronto per l'invio scriviamo questi oggetti a ServletoutputStream.

client collaterali

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

Il server è stato configurato per informare i clienti di quanto sono grandi le risposte? In caso contrario, il server sta trasmettendo i dati, ed è tecnicamente impossibile stabilire quanto spazio di buffer è necessario per gestire la risposta, garantendo un avvertimento che qualcosa di potenzialmente pericoloso sta succedendo.