【问题标题】:Java: BufferedReader and WebAPI responseJava:BufferedReader 和 WebAPI 响应
【发布时间】: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 代码才包含这些内容……有什么想法吗?
  • 我也处理响应数据,通常会附加标头信息。问题是服务器返回的任何响应数据都会自动包含data json的键。

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


【解决方案1】:

通过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了解更多详情

【讨论】:

    猜你喜欢
    • 2012-09-20
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 2019-01-06
    相关资源
    最近更新 更多