Java:BufferedReader和WebAPI响应

时间:2016-08-11 16:03:52

标签: java json asp.net-web-api bufferedreader

我有一个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())));

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

{
   "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响应部分,我收到错误“位置281处的意外字符(H)”。

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

1 个答案:

答案 0 :(得分:0)

通过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

正则表达式

.*zz\s*:\s*(.*)[\n\r]/g

<强>输出

sample 123123

有关详细信息,请参阅this link