Чтение контента в формате JSON - PullRequest
15 голосов
/ 14 июня 2011

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

Спасибо!

Ответы [ 5 ]

21 голосов
/ 14 июня 2011

Прекрасно, но 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);
// ...
4 голосов
/ 25 мая 2013

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

Connection  con = HttpConnection.connect(url);
con.method(Method.POST).data(data.params).ignoreContentType(true);
Response resp = con.execute();
String body = resp.body();
1 голос
/ 30 мая 2017

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 и зависимости Гсона.

0 голосов
/ 26 июля 2016

Я видел много ответов, и люди писали на страницах код, я понятия не имею, почему, но вы можете легко сделать это с 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();
}
0 голосов
/ 14 июня 2011

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

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

...