web-dev-qa-db-fra.com

comment analyser un fichier JSON avec GSON

J'ai un JSON très simple avec des critiques pour des produits, comme:

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

Je voudrais le lire dans mon application Java en utilisant GSON. J'ai construit une classe pour conserver les résultats pour chaque examen:

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...

Pour lire le fichier JSON, mon code est le suivant:

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

Avec ce code, je ne peux que récupérer le premier avis dans le JSON, ma question est donc: comment parcourir tous les lecteurs et obtenir les prochains avis? Je n'ai pas besoin de stocker les commentaires dans une liste, il suffit d'accéder à l'objet une fois. Toute aide plus que bienvenue.

36
user299791

Vous devez récupérer toutes les données de la liste, puis effectuer l'itération car il s'agit d'un fichier et deviendra inefficace sinon.

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
63
Archit Maheshwari

juste analyser comme un tableau:

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

alors si vous avez besoin, vous pouvez aussi créer une liste de cette façon:

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

P.S. votre chaîne json devrait ressembler à ceci:

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

    [...]
]
21
dit

Au cas où vous auriez besoin de l’analyser à partir d’un fichier fichier , je trouve la meilleure solution pour utiliser un HashMap<String, String> et l’utiliser dans votre code Java pour une meilleure manipulation. 

Essayez ce code:

public HashMap<String, String> myMethodName() throws FileNotFoundException
{
    String path = "absolute path to your file";
    BufferedReader bufferedReader = new BufferedReader(new FileReader(path));

    Gson gson = new Gson();
    HashMap<String, String> json = gson.fromJson(bufferedReader, HashMap.class);
    return json;
}
1