it-swarm.com.de

so analysieren Sie die JSON-Datei mit GSON

Ich habe eine sehr einfache JSON mit Bewertungen für Produkte wie:

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

Ich möchte es mit GSON in meine Java-App einlesen. Ich habe eine Klasse aufgebaut, in der Ergebnisse für jede Überprüfung enthalten sind:

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

Um die JSON-Datei zu lesen, lautet mein Code:

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

Mit diesem Code kann ich nur die erste Überprüfung in der JSON abrufen. Daher lautet meine Frage: Wie kann ich den gesamten Leser durchlaufen und die nächsten Bewertungen erhalten? Ich muss die Bewertungen nicht in einer Liste speichern, sondern muss nur einmal auf das Objekt zugreifen. Jede Hilfe mehr als willkommen.

36
user299791

Sie müssen die gesamten Daten in der Liste abrufen und dann die Iteration durchführen, da es sich um eine Datei handelt, die sonst ineffizient wird.

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

nur als Array analysieren:

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

wenn Sie möchten, können Sie auch eine Liste auf diese Weise erstellen:

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

P.S. Dein Json-String sollte so aussehen:

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

Falls Sie es aus einer Datei analysieren müssen , finde ich die beste Lösung, um einen HashMap<String, String> zu verwenden, um es in Ihrem Java-Code für eine bessere Manipulation zu verwenden. 

Probieren Sie diesen Code aus:

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