Подтвердить что ты не робот

Чтение содержимого JSON

Я использую jsoup для очистки некоторых данных HTML, и это отлично работает. Теперь мне нужно вытащить контент JSON (только JSON, а не HTML). Могу ли я сделать это легко с помощью jsoup или мне нужно сделать это, используя другой метод? Анализ, выполняемый jsoup, кодирует данные JSON, поэтому он не корректно разбирается с Gson.

Спасибо!

4b9b3361

Ответ 1

В то время как отлично, Jsoup является парсером HTML, а не парсером JSON, поэтому в этом контексте он бесполезен. Если вы когда-нибудь попытаетесь, Jsoup поместит возвращенный JSON неявно в <html><head> и так далее. Вы не хотите этого. Gson является парсером JSON, поэтому вам это обязательно нужно.

Ваша конкретная проблема, скорее всего, вы не знаете, как подать URL-адрес, возвращающий JSON в Gson. В этом случае вам нужно использовать URL#openStream(), чтобы получить InputStream от него и использовать InputStreamReader, чтобы украсить его в Reader, который, наконец, может быть отправлен на Gson#fromJson(), который принимает Reader.

InputStream input = new URL("http://example.com/foo.json").openStream();
Reader reader = new InputStreamReader(input, "UTF-8");
Data data = new Gson().fromJson(reader, Data.class);
// ...

Ответ 2

Jsoup не предназначен для синтаксического анализа JSON. Используйте Gson (или любую другую java-библиотеку java). Для получения удаленного контента с помощью Jsoup используйте это:

Connection  con = HttpConnection.connect(url);
con.method(Method.POST).data(data.params).ignoreContentType(true);
Response resp = con.execute();
String body = resp.body();

Ответ 3

Я не знаю о jsoup, но если он действительно JSON, то Gson должен быть способен декодировать (возможно, для ваших пользовательских классов могут потребоваться некоторые пользовательские десериализаторы).

Если это недействительно JSON, и вы получаете ошибки, то в jsoup есть ошибка.

Ответ 4

Я видел много ответов и людей, которые пишут страницы с кодом, я понятия не имею, почему, но вы можете сделать это легко с помощью GSON.

/**
 * Convert json string to json object
 */
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

private JsonObject getResAsJson(String response) {
    return new JsonParser().parse(response).getAsJsonObject();
}

Ответ 5

Jsoup не анализирует JSON, но его можно легко использовать для сбора данных JSON.

package com.zetcode;

import com.google.gson.Gson;
import java.io.IOException;
import org.jsoup.Jsoup;

class TimeData {

    private String time;
    private Long milliseconds_since_epoch;
    private String date;

    @Override
    public String toString() {
        return "TimeData{" + "time=" + time + ", milliseconds_since_epoch=" 
                + milliseconds_since_epoch + ", date=" + date + '}';
    }
}


public class GsonReadWebPage {

    public static void main(String[] args) throws IOException {

        String webPage = "http://time.jsontest.com";

        String data = Jsoup.connect(webPage).ignoreContentType(true).execute().body();

        Gson gson = new Gson();
        TimeData td = gson.fromJson(data, TimeData.class);

        System.out.println(td);
    }
}

В примере читаются данные JSON из http://time.jsontest.com с помощью JSoup и разбирает JSON с Gson. Чтобы выполнить этот пример, вам нужен Jsoup и Gson.