阅读JSON内容

我正在使用jsoup来抓取一些HTML数据,而且效果很好。 现在我需要提取一些JSON内容(只有JSON,而不是HTML)。 我可以使用jsoup轻松完成此操作,还是必须使用其他方法? jsoup执行的解析是对JSON数据进行编码,因此它无法使用Gson正确解析。

谢谢!

虽然很棒,但Jsoup是一个HTML解析器,而不是JSON解析器,因此在这种情况下它是无用的。 如果您尝试过,Jsoup会将返回的JSON隐式放在 ,依此类推。 你不想拥有它。 Gson是一个JSON解析器,所以你肯定需要它。

您的具体问题可能是您不知道如何提供将JSON返回给Gson的URL。 在这种情况下,您需要使用URL#openStream()来获取它的InputStream ,并使用InputStreamReader将其装饰成Reader ,最后可以将其提供给接受Reader Gson#fromJson()

 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); // ... 

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(); 

我不知道jsoup,但如果它是有效的JSON,那么Gson应该能够解码(可能需要一些自定义反序列化器用于您的自定义类)。

如果它不是有效的JSON而你得到错误,那么jsoup中就有一个错误。

我已经看到很多答案和人们编写值得代码的页面,我不知道为什么你可以用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(); } 

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); } } 

该示例使用JSoup从http://time.jsontest.com读取JSON数据,并使用Gson解析JSON。 要执行此示例,您需要Jsoup和Gson依赖项。