Как получить необработанный текст JSON из ответа Unirest в Java

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


person Tina J    schedule 12.12.2018    source источник


Ответы (2)


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());
person Neeraj    schedule 12.12.2018
comment
Интересный. По-видимому, мое затмение не выводило это! В шелле вижу отклик! - person Tina J; 13.12.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");
person frederikdebacker    schedule 12.12.2018
comment
Да, но это не возвращает String. Это InputStream. - person Tina J; 13.12.2018
comment
Вы можете прочитать входной поток в строку. Вы можете проверить stackoverflow.com/questions/309424/ - person frederikdebacker; 13.12.2018
comment
да, я знаю. Но думаю, есть ли более простой способ сделать это (кстати, пожалуйста, опубликуйте полный ответ, чтобы я мог отметить вас как лучший ответ) - person Tina J; 13.12.2018