2013-06-19 37 views
6

Tôi đã cố gắng lấy JSONObject từ một phản hồi HTTP.HTTPResponse dưới dạng JSON trong 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; 
    } 

Nhưng tôi nhận được một cảnh báo thời gian chạy như

Đi đệm cơ thể phản ứng của kích thước lớn hoặc chưa biết. Thay vào đó, hãy sử dụng getResponseBodyAsStream.

Tôi có nên nhận phản hồi dưới dạng luồng như đề xuất của JVM không? Nếu vậy, làm thế nào tôi có thể phân tích cú pháp JSON từ nó?

+2

Chỉ cần đọc nội dung để một 'byte [] ', rẽ mà' byte [] 'vào một' chuỗi' (tùy thuộc vào mã hóa) và phân tích rằng 'chuỗi' như JSON – fge

+0

Tôi hy vọng rằng một trong số hàng tá gói JSON cho Java có thể đọc trực tiếp từ một luồng. –

Trả lời

1

nếu bạn muốn gửi jsonObjects từ máy chủ giả (tomcat server)

Đối với máy chủ dụng phụ

tạo jsonobjects -

Tôi đã gọi toJson() để tạo jsonobjects đây là 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; 
} 

để jsonobjects của bạn sẵn sàng gửi chúng tôi viết các đối tượng này đến ServletoutputStream.

trong ứng dụng phụ

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

Máy chủ của bạn có được thiết lập để thông báo cho khách hàng mức độ phản hồi của máy chủ lớn không? Nếu không, máy chủ của bạn đang truyền dữ liệu, và về mặt kỹ thuật không thể cho biết dung lượng bộ nhớ cần thiết để xử lý phản hồi, đảm bảo cảnh báo rằng có thể có điều gì đó nguy hiểm đang xảy ra.

Các vấn đề liên quan