Java: BufferedReader and WebAPI response



我有一个bufferedReader正在接受WebAPI对httpPost请求的响应。

HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/json");
 /* send http-POST request to webAPI */
OutputStream os = conn.getOutputStream();
os.write(input.getBytes());
os.flush();

BufferedReader br = new BufferedReader(new InputStreamReader(
            (conn.getInputStream())));

包含在'br'中的数据作为对webapi发出的httpPost请求的结果:-

{
   "xx" : "...."
   "yy" : "...."
   "zz" : "...."
}
HTTP/1.1 202... blah blah blah
Content-Length: 35
X-Frame-Options: deny
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
Connection: close

首先,我想指出的是,这是奇怪的,我在响应本身得到标题信息…但仅限于JAVA…(我用c#写同样的东西,这是我最精通的地方,没有收到任何标题信息)。这可能吗?自……在我的理解中,webapi的响应是独立于c#或Java代码的?

现在我的主要目标是提取键'zz'的值。

我正在尝试这样做:-

 JSONParser parser = new JSONParser();
  try
   {
     JSONObject json = (JSONObject) parser.parse(br);
   }
  catch (org.json.simple.parser.ParseException e)
   {
     e.printStackTrace();
   }

然而,由于消息的奇怪的HTTP/202响应部分,我得到一个错误"意外字符(H)在位置281"。

所以,我在想,也许我需要截断我的缓冲区'br'之前,我尝试使用JSON。我想知道这样做的最好方法是什么?

通过json进行操作将使其更加复杂,因为您必须首先将其转换为适当的json,以便允许json解析器解析。

更理想的方法是通过正则表达式

输入

{
   xx : 
   yy :
   zz : sample 123123
}
HTTP/1.1 202... blah blah blah
Content-Length: 35
X-Frame-Options: deny
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
Connection: close
正则表达式

.*zzs*:s*(.*)[nr]/g

sample 123123

查看此链接了解更多详细信息

最新更新