HTTPResponse作为Java中的JSON
我试图从HTTP响应获取JSONObjectHTTPResponse作为Java中的JSON,java,json,jakarta-ee,httpresponse,Java,Json,Jakarta Ee,Httpresponse,我试图从HTTP响应获取JSONObject try { GetMethod postMethod = new GetMethod(); postMethod.setURI(new URI(url, true)); postMethod.setRequestHeader("Accept", "application/json"); httpClient.executeMethod(postMethod);
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();
有关详细信息,请转到链接。
如果要从服务器(tomcat服务器)发送
JSONObject
对于服务器端-
创建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;
}
只需将内容读到
字节[]
,将字节[]
转换成字符串(取决于编码),并解析字符串,因为JSONI希望Java的几十个JSON包中的一个可以直接从流中读取。
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();
}
}
}
}