有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

json Java:BufferedReader和WebAPI响应

我有一个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) 个答案

  1. # 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