Как получить необработанный текст JSON из ответа Unirest в Java - PullRequest
0 голосов
/ 13 декабря 2018

Я пытаюсь отправить POST-запрос на сервер, получить ответ и проанализировать его (это файл JSON).

Я использую Unirest для моего POST-запроса, как показано ниже:

        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() методов пока не увенчались успехом.

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

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());
0 голосов
/ 13 декабря 2018

Вы можете сделать это так:

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");
...