从 Java 中的 HTTP 响应解析 JSON
Parsing a JSON from HTTP Response in Java
您好,我正在使用客户端 Http (apache),并且 json-simple。
我想访问 json 响应的属性,然后使用它们。
知道怎么做吗?我读了一篇 post 但没有像它那样工作,而是我。
这是我的回答json:
{"Name":"myname","Lastname":"mylastname","Age":19}
这是我的代码java:
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpGet getRequest = new HttpGet(
"http://localhost:8000/responsejava");
getRequest.addHeader("accept", "application/json");
HttpResponse response = httpClient.execute(getRequest);
if (response.getStatusLine().getStatusCode() != 200) {
throw new RuntimeException("Failed : HTTP error code : "
+ response.getStatusLine().getStatusCode());
}
BufferedReader br = new BufferedReader(
new InputStreamReader(
(response.getEntity().getContent())
)
);
StringBuilder content = new StringBuilder();
String line;
while (null != (line = br.readLine())) {
content.append(line);
}
Object obj=JSONValue.parse(content.toString());
JSONObject finalResult=(JSONObject)obj;
System.out.println(finalResult);
httpClient.getConnectionManager().shutdown();
我打印了 null,我做错了什么?
而不是
Object obj=JSONValue.parse(content.toString());
JSONObject finalResult=(JSONObject)obj;
System.out.println(finalResult);
试试这个:
JSONObject jsonObject = new JSONObject(content.toString());
System.out.println(jsonObject.getString("Name") + " " jsonObject.getString("Lastname") + " " + jsonObject.getInt("Age"));
更好更易用 Gson
Gson gson = new Gson;
NameBean name = gson.fromJson(content.toString(),NameBean.class)
NameBean
是您保存 json 字符串的对象。
public class NameBean implements Serializable{
public String name;
public String lastname;
public Int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getLastname() {
return lastname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
public Int getAge() {
return age;
}
public void setAge(Int age) {
this.age = age;
}
}
我强烈推荐 http-request 基于 apache http api。
HttpRequest<Data> httpRequest = HttpRequestBuilder.createGet(yourUri, Data.class)
.addDefaultHeader("accept", "application/json")
.build();
public void send(){
ResponseHandler<Data> responseHandler = httpRequest.execute();
Data data = responseHandler.orElseThrow(); // returns the data or throws ResponseException If response code is not success
}
Data
class 你得到的回应。
public Data{
private String Name;
private String Lastname;
private int Age;
// getters and setters
}
我也建议看我的回答here如果你想得到字符串形式的回复
您好,我正在使用客户端 Http (apache),并且 json-simple。
我想访问 json 响应的属性,然后使用它们。
知道怎么做吗?我读了一篇 post 但没有像它那样工作,而是我。
这是我的回答json:
{"Name":"myname","Lastname":"mylastname","Age":19}
这是我的代码java:
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpGet getRequest = new HttpGet(
"http://localhost:8000/responsejava");
getRequest.addHeader("accept", "application/json");
HttpResponse response = httpClient.execute(getRequest);
if (response.getStatusLine().getStatusCode() != 200) {
throw new RuntimeException("Failed : HTTP error code : "
+ response.getStatusLine().getStatusCode());
}
BufferedReader br = new BufferedReader(
new InputStreamReader(
(response.getEntity().getContent())
)
);
StringBuilder content = new StringBuilder();
String line;
while (null != (line = br.readLine())) {
content.append(line);
}
Object obj=JSONValue.parse(content.toString());
JSONObject finalResult=(JSONObject)obj;
System.out.println(finalResult);
httpClient.getConnectionManager().shutdown();
我打印了 null,我做错了什么?
而不是
Object obj=JSONValue.parse(content.toString());
JSONObject finalResult=(JSONObject)obj;
System.out.println(finalResult);
试试这个:
JSONObject jsonObject = new JSONObject(content.toString());
System.out.println(jsonObject.getString("Name") + " " jsonObject.getString("Lastname") + " " + jsonObject.getInt("Age"));
更好更易用 Gson
Gson gson = new Gson;
NameBean name = gson.fromJson(content.toString(),NameBean.class)
NameBean
是您保存 json 字符串的对象。
public class NameBean implements Serializable{
public String name;
public String lastname;
public Int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getLastname() {
return lastname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
public Int getAge() {
return age;
}
public void setAge(Int age) {
this.age = age;
}
}
我强烈推荐 http-request 基于 apache http api。
HttpRequest<Data> httpRequest = HttpRequestBuilder.createGet(yourUri, Data.class)
.addDefaultHeader("accept", "application/json")
.build();
public void send(){
ResponseHandler<Data> responseHandler = httpRequest.execute();
Data data = responseHandler.orElseThrow(); // returns the data or throws ResponseException If response code is not success
}
Data
class 你得到的回应。
public Data{
private String Name;
private String Lastname;
private int Age;
// getters and setters
}
我也建议看我的回答here如果你想得到字符串形式的回复