我有一个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'。我想知道这样做的最佳方式是什么?
答案 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