如何使用 GSON 解析 JSON 文件

新手上路,请多包涵

我有一个非常简单的 JSON,其中包含产品评论,例如:

 {
  "reviewerID": "A2XVJBSRI3SWDI",
  "asin": "0000031887",
  "reviewerName": "abigail",
  "helpful": [0, 0],
  "unixReviewTime": 1383523200,
  "reviewText": "Perfect red tutu for the price. ",
  "overall": 5.0,
  "reviewTime": "11 4, 2013", "summary": "Nice tutu"
}
{
  "reviewerID": "A2G0LNLN79Q6HR",
  "asin": "0000031887",
  "reviewerName": "aj_18 \"Aj_18\"",
  "helpful": [1, 1],
  "unixReviewTime": 1337990400,
  "reviewText": "This was a really cute",
 "overall": 4.0,
 "reviewTime": "05 26, 2012",
 "summary": "Really Cute but rather short."
}

我想使用 GSON 将它读入我的 Java 应用程序。我建立了一个类来保存每次评论的结果:

 public class Review {
    private String reviewerID;
    private String asin;
    private String reviewerName;
    private ArrayList<Integer> helpful;
    private String reviewText;
    private Double overall;
    private String summary;
    private Long unixReviewTime;
    private String reviewTime;

    public Review() {
        this.helpful = Lists.newArrayList();
    }
    // some getters and setters...

要读取 JSON 文件,我的代码是:

 Gson gson = new Gson();
JsonReader reader = new JsonReader(new FileReader(filename));
Review data = gson.fromJson(reader, Review.class);
data.toScreen(); // prints to screen some values

使用此代码,我只能检索 JSON 中的第一条评论,所以我的问题是:如何遍历所有读者并获取下一条评论?我不需要将评论存储在列表中,只需要访问该对象一次。欢迎任何帮助。

原文由 user299791 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 440
2 个回答

您必须获取列表中的全部数据,然后进行迭代,因为它是一个文件,否则会变得低效。

 private static final Type REVIEW_TYPE = new TypeToken<List<Review>>() {
}.getType();
Gson gson = new Gson();
JsonReader reader = new JsonReader(new FileReader(filename));
List<Review> data = gson.fromJson(reader, REVIEW_TYPE); // contains the whole reviews list
data.toScreen(); // prints to screen some values

原文由 Archit Maheshwari 发布,翻译遵循 CC BY-SA 4.0 许可协议

只是解析为一个数组:

 Review[] reviews = new Gson().fromJson(jsonString, Review[].class);

然后如果你需要你也可以用这种方式创建一个列表:

 List<Review> asList = Arrays.asList(reviews);

PS 你的 json 字符串应该是这样的:

 [
    {
        "reviewerID": "A2SUAM1J3GNN3B1",
        "asin": "0000013714",
        "reviewerName": "J. McDonald",
        "helpful": [2, 3],
        "reviewText": "I bought this for my husband who plays the piano.",
        "overall": 5.0,
        "summary": "Heavenly Highway Hymns",
        "unixReviewTime": 1252800000,
        "reviewTime": "09 13, 2009"
    },
    {
        "reviewerID": "A2SUAM1J3GNN3B2",
        "asin": "0000013714",
        "reviewerName": "J. McDonald",
        "helpful": [2, 3],
        "reviewText": "I bought this for my husband who plays the piano.",
        "overall": 5.0,
        "summary": "Heavenly Highway Hymns",
        "unixReviewTime": 1252800000,
        "reviewTime": "09 13, 2009"
    },

    [...]
]

原文由 dieter 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题