【发布时间】:2016-12-18 11:32:32
【问题描述】:
我有一个 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 响应部分,我收到错误“位置 281 处的意外字符 (H)”。
所以,我在想,也许我需要在尝试使用 JSON 之前截断缓冲区“br”。我想知道这样做的最佳方法是什么?
【问题讨论】:
-
您收到该错误是因为您正在解析的字符串无效
JSON -
我确实了解拉曼。然而,在我的下一个陈述中,我提到了我如何试图弄清楚如何截断该字符串,以便我可以将其解析为 json。
-
正如您所说,您也可以截断它。但是你为什么要让它变得复杂。为什么不使用像正则表达式这样简单的东西?请参阅此链接regex101.com/r/gN4oJ8/2。请参阅 RHS 上的匹配信息列
-
不错,没想过这种方法。此外,我的回复包含标题信息很奇怪......你不觉得吗?对于我的 C# 代码,来自 webapi 的响应不包含任何标头信息……只有我的 java 代码才包含这些内容……有什么想法吗?
-
我也处理响应数据,通常会附加标头信息。问题是服务器返回的任何响应数据都会自动包含
datajson的键。
标签: java json asp.net-web-api bufferedreader