如何使用Google的Gson从JSON响应中获取特定值?

时间:2013-05-17 00:02:16

标签: java json gson

我目前正在尝试使用他们很酷的网站功能解析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]
}

}

1 个答案:

答案 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中的元素名称,将解析更多数据......

其他类似示例hereherehere

最后请注意,您可以使您的类嵌套以保持项目更清晰,但是如果您不喜欢编写这么多类,并且您确定只需要该特定值而您不希望任何类未来的价值,你可以使用this different approach,虽然我不推荐它......