Как получить данные JSON из HTML с помощью jsoup - PullRequest
0 голосов
/ 10 мая 2019

Я нажимаю URL в WebView, который возвращает ответ в формате HTML. Я пытался получить данные JSON из этого HTML-кода с помощью Jsoup, но не смог их получить.

Я получаю данные в следующем формате:

<code><pre style="word-wrap: break-word; white-space: pre-wrap;">{"status":"success","connected_id":"dfdffdffdfdfdf"}

Теперь я хочу получить это connected_id из вышеприведенного ответа, но я не могу этого получить.

Код:

Document document = Jsoup.parse(html);
Elements elements = document.select("pre");
Log.d("TAG", " myHTMLResponseCallback1 : " + elements.attr("pre"));

Я не получаю никакого значения в elements.attr("connected_id").

1 Ответ

0 голосов
/ 12 мая 2019

Итак, проблема в том, что ваш элемент <pre> содержит строку JSON, которую нельзя проанализировать с помощью Jsoup.В любом случае первым шагом является извлечение строки JSON:

<code>String html = "<pre style=\"word-wrap: break-word; white-space: pre-wrap;\">{\"status\":\"success\",\"connected_id\":\"dfdffdffdfdfdf\"}
"; Document document = Jsoup.parse (html); Element element = document.selectFirst (" pre "); String json = element.text ();

Самый простой, но, вероятно, не самый лучший способ извлечь connected_id из строки JSON - это использовать регулярное выражение:

Pattern pattern = Pattern.compile("\"connected_id\":\"(?<id>.*)\"");
Matcher matcher = pattern.matcher(json);
if (matcher.find()) {
    String connectedId = matcher.group("id");
    // ...
}

Лучшим способом было бы разобратьстрока JSON. Этого можно добиться, используя библиотеку синтаксического анализа JSON, например Джексон , Гсон или другие .

Вот пример использования Джексона:

ObjectMapper mapper = new ObjectMapper();
JsonNode jsonNode = mapper.readTree(json);
String connectedId = jsonNode.get("connected_id").asText();

Если вы хотите извлечь еще несколько значений (не только connected_id), я бы предложил преобразовать строку JSON в объект Java следующим образом:

public class MyObject {
    private String status;
    @JsonProperty("connected_id")
    private String connectedId;
    // more attributes if you need them

    // getter and setter
}

Youтеперь можно использовать этот класс для чтения значения json:

ObjectMapper mapper = new ObjectMapper();
MyObject result = mapper.readValue(json, MyObject.class);
String connectedId = result.getConnectedId();

Все решения вернут dfdffdffdfdfdf как результат.

...