Чтение содержимого JSON
Я использую jsoup для очистки некоторых данных HTML, и это отлично работает. Теперь мне нужно вытащить контент JSON (только JSON, а не HTML). Могу ли я сделать это легко с помощью jsoup или мне нужно сделать это, используя другой метод? Анализ, выполняемый jsoup, кодирует данные JSON, поэтому он не корректно разбирается с Gson.
Спасибо!
Ответы
Ответ 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.