我正在尝试对Web API执行HTTP post请求,然后解析收到的HttpResponse并访问正文中的键值对。我的代码是这样的:
public class access {
// http://localhost:8080/RESTfulExample/json/product/post
public static void main(String[] args) {
HttpClient httpclient = HttpClients.createDefault();
HttpPost httppost = new HttpPost("https://XXXXXXX/RSAM_API/api/Logon");
// Request parameters and other properties.
List<NameValuePair> urlParameters = new ArrayList<NameValuePair>(2);
urlParameters.add(new BasicNameValuePair("UserId", "XXXXX"));
urlParameters.add(new BasicNameValuePair("Password", "XXXXXX"));
try {
httppost.setEntity(new UrlEncodedFormEntity(urlParameters));
//Execute and get the response.
HttpResponse response = httpclient.execute(httppost);
BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
String line;
while(null !=(line=rd.readLine())){
System.out.println(line);
}
System.out.println(response);
String resp = EntityUtils.toString(response.getEntity());
JSONObject obj = new JSONObject(resp);
}
catch (Exception e){
e.printStackTrace();
}
}
}
我正在尝试通过使用以下 2 行代码将其转换为 JSONObject 来访问正文:
String resp = EntityUtils.toString(response.getEntity());
JSONObject obj = new JSONObject(resp);
但是我在第二行中得到一个错误,说:
JSONObject
(java.util.Map)
in JSONObject cannot be applied
to
(java.lang.String)
不确定这是否是正确的方法。有没有办法做我想做的事情?
任何帮助将不胜感激,谢谢。
编辑:因此,当我尝试使用以下行打印响应正文时, String resp = EntityUtils.toString(response.getEntity());
System.out.println(resp);
我得到的结果是:{"APIKey":"xxxxxxxxxxxxxx","StatusCode":0,"StatusMessage":"You have been successfully logged in."}
我正在寻找一种方法来解析此结果,然后访问每个元素。有没有办法做到这一点?
根据JsonSimple的JsonObject文档,它在构造函数中获取map,而不是String。所以错误你得到了它所说的。应先使用 JSONParser
来分析字符串。最好根据您的方案提供编码作为EntityUtils.toString
UTF-8 或 16 的一部分。
Apache Commons IO
IOUtils.toString()
也是更好的选择。
尝试以下行来解析 JSON:
JSONParser parser = new JSONParser();
JSONObject obj = (JSONObject) parser.parse(resp);
上述行将使 JSON 失效,如果 JSON 无效,则通过例外。
您无需在额外的while
循环中读取响应。EntityUtils.toString(response.getEntity(((;会为你做这件事。正如您之前阅读响应流时,当进入 response.getEntity(( 时,流已经关闭。