我目前正在尝试使用他们很酷的网站功能解析Reddit的首页,您可以在其中添加/.json到任何网站以获取页面的json。所以我使用的网址是www.reddit.com/.json。
我想通过解析他们的json获得第一篇文章的subreddit。我该怎么做?我做了一些研究,发现了谷歌gson api,但我不知道如何使用它,他们的文档对我没有帮助。
到目前为止,这是我的代码,我在字符串中有Json:
import java.io.*;
import java.net.*;
import com.google.gson.*;
public class Subreddits {
public static void main(String[] args) {
URL u = null;
try {
u = new URL("http://www.reddit.com/.json");
} catch (MalformedURLException e) {
e.printStackTrace();
}
URLConnection yc = null;
try {
yc = u.openConnection();
} catch (IOException e) {
e.printStackTrace();
}
BufferedReader in = null;
try {
in = new BufferedReader(new InputStreamReader(yc.getInputStream()));
} catch (IOException e) {
e.printStackTrace();
}
String inputLine = null;
StringBuilder sb = new StringBuilder();
try {
while ((inputLine = in.readLine()) != null){
sb.append(inputLine);
}
} catch (IOException e) {
e.printStackTrace();
}
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
inputLine = sb.toString();//String of json
System.out.println(inputLine);
//I want to get [data][children][data][subreddit]
}
}
答案 0 :(得分:3)
您可以创建此类结构来解析您的响应(在伪代码中):
class Response
Data data
class Data
List<Child> children
class Child
OtherData data
class OtherData
String subreddit
然后使用:
解析JSON字符串Gson gson = new Gson();
Response response = gson.fromJson(inputLine, Response.class);
为了获得您需要的具体数据,只需:
String subreddit = response.getData().getChildren().getOtherData().getSubreddit();
请注意,您可以更改类的名称,但不能更改属性的名称,因为它们必须与JSON响应中的名称匹配!
另请注意,我只添加了获取具体数据所需的属性,但如果在类中添加更多属性,则匹配JSON中的元素名称,将解析更多数据......
最后请注意,您可以使您的类嵌套以保持项目更清晰,但是如果您不喜欢编写这么多类,并且您确定只需要该特定值而您不希望任何类未来的价值,你可以使用this different approach,虽然我不推荐它......