cómo analizar el archivo JSON con GSON

Tengo un JSON muy simple con reseñas de productos, como:

{ "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." } 

Me gustaría leerlo en mi aplicación Java usando GSON. Creé una clase para mantener los resultados de cada revisión:

 public class Review { private String reviewerID; private String asin; private String reviewerName; private ArrayList 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... 

Para leer el archivo JSON, mi código es:

 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 

Con este código, solo puedo recuperar la primera revisión en el JSON, por lo que mi pregunta es: ¿cómo iterar a través de todo el lector y obtener las próximas revisiones? No necesito almacenar las revisiones en una lista, solo necesito acceder al objeto una vez. Cualquier ayuda más que bienvenida.

Tienes que buscar toda la información en la lista y luego hacer la iteración, ya que es un archivo y, de lo contrario, se volverá ineficiente.

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

solo analizar como una matriz:

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

luego, si lo necesita, también puede crear una lista de esta manera:

 List asList = Arrays.asList(reviews); 

PD: tu cadena json debería verse así:

 [ { "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" }, [...] ]