簡體   English   中英

HTTPResponse為Java中的JSON

[英]HTTPResponse as JSON in Java

我試圖從HTTP響應中獲取JSONObject。

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?

您的服務器是否已設置為通知客戶其響應有多大? 如果沒有,您的服務器正在流式傳輸數據,從技術上講,無法確定處理響應需要多少緩沖區空間,因此需要警告某些潛在危險的事情正在發生。

您可以使用Java EE 7輕松生成JSonObject。示例代碼。

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

有關詳細信息,請轉到鏈接。 http://docs.oracle.com/javaee/7/tutorial/doc/jsonp003.htm#BABHAHIA

如果你想從服務器發送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();
            }
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM