在 Java 中解析 httpResponse JSON



我正在尝试对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":"Y‌​ou 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(( 时,流已经关闭。

最新更新