如何从 Java 中的 Unirest 响应中获取原始 JSON 文本
How to get raw JSON text from Unirest response in Java
我正在尝试向服务器发送 POST 请求,获取响应并解析它(这是一个 JSON 文件)。
我正在为我的 POST 请求使用 Unirest,如下所示:
HttpResponse<JsonNode> response = Unirest
.post("http://myserver.com/file")
.header("cache-control", "no-cache")
.header("Postman-Token", "02ec2fa1-afdf-4a2a-a535-353424d99400")
.header("Content-Type", "application/json")
.body("{some JSON body}")
.asJson();
// retrieve the parsed JSONObject from the response
JSONObject myObj = response.getBody().getObject();
// extract fields from the object
String msg = myObj.toString();
System.out.println(msg);
但是我在获取 原始 JSON 文本 时遇到问题(我想使用 JSONPath
来解析响应)。
我该怎么做?到目前为止,我所有调用 toString()
方法的尝试都失败了。
你可以这样做:
InputStream inputStream = response.getRawBody();
BufferedInputStream bis = new BufferedInputStream(inputStream);
ByteArrayOutputStream buf = new ByteArrayOutputStream();
int result = bis.read();
while(result != -1) {
buf.write((byte) result);
result = bis.read();
}
String rawJson = buf.toString("UTF-8");
Unirest API 支持开箱即用 - 使用 asString()
而不是 asJson()
来获得 HttpResponse<String>
.
的响应
HttpResponse<String> response = Unirest
.post("http://myserver.com/file")
.header("cache-control", "no-cache")
.header("Postman-Token", "02ec2fa1-afdf-4a2a-a535-353424d99400")
.header("Content-Type", "application/json")
.body("{some JSON body}")
.asString();
System.out.println(response.getBody());
我正在尝试向服务器发送 POST 请求,获取响应并解析它(这是一个 JSON 文件)。
我正在为我的 POST 请求使用 Unirest,如下所示:
HttpResponse<JsonNode> response = Unirest
.post("http://myserver.com/file")
.header("cache-control", "no-cache")
.header("Postman-Token", "02ec2fa1-afdf-4a2a-a535-353424d99400")
.header("Content-Type", "application/json")
.body("{some JSON body}")
.asJson();
// retrieve the parsed JSONObject from the response
JSONObject myObj = response.getBody().getObject();
// extract fields from the object
String msg = myObj.toString();
System.out.println(msg);
但是我在获取 原始 JSON 文本 时遇到问题(我想使用 JSONPath
来解析响应)。
我该怎么做?到目前为止,我所有调用 toString()
方法的尝试都失败了。
你可以这样做:
InputStream inputStream = response.getRawBody();
BufferedInputStream bis = new BufferedInputStream(inputStream);
ByteArrayOutputStream buf = new ByteArrayOutputStream();
int result = bis.read();
while(result != -1) {
buf.write((byte) result);
result = bis.read();
}
String rawJson = buf.toString("UTF-8");
Unirest API 支持开箱即用 - 使用 asString()
而不是 asJson()
来获得 HttpResponse<String>
.
HttpResponse<String> response = Unirest
.post("http://myserver.com/file")
.header("cache-control", "no-cache")
.header("Postman-Token", "02ec2fa1-afdf-4a2a-a535-353424d99400")
.header("Content-Type", "application/json")
.body("{some JSON body}")
.asString();
System.out.println(response.getBody());