2013-06-19 4 views
6

Я пытался получить JSONObject из ответа HTTP.HTTPResponse как JSON в 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; 
    } 

Но я получил предупреждение во время выполнения, как

Идущий в буфер тела ответа большого или неизвестного размера. Рекомендуется использовать getResponseBodyAsStream.

Должен ли я получить ответ как поток, предложенный JVM? Если да, то как я могу разобрать JSON?

+2

Просто прочитать содержимое в 'байт []', 'свою очередь, что байт []' в 'String' (в зависимости от кодировки) и разобрать, что' String' как JSON – fge

+0

Я хотел бы надеяться, что один из нескольких десятков пакетов JSON для Java может читать напрямую из потока. –

ответ

1

если вы хотите отправить jsonObjects с сервера предположим (сервер Tomcat)

Для сервера бок-

создания jsonobjects -

Я Вызывается toJson() для создания jsonobjects это является реализации-

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

Был ли ваш сервер настроен для информирования клиентов о том, насколько велики его ответы? Если нет, ваш сервер передает потоки данных, и технически невозможно определить, сколько буферного пространства требуется для ответа на него, что предостерегает, что происходит что-то потенциально опасное.

Смежные вопросы