6

我试图从 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?

4

3 回答 3

3

您的服务器是否已设置为通知客户它的响应有多大?如果不是,您的服务器正在流式传输数据,从技术上讲,无法判断需要多少缓冲区空间来处理响应,因此需要发出警告,表明正在发生潜在危险。

于 2013-06-19T13:07:35.257 回答
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();
            }
        }
    }
}
于 2013-06-20T12:45:52.070 回答
1

您可以使用 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

于 2013-06-20T11:00:59.810 回答