
Benutzer299791
Ich habe ein sehr einfaches 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 erstellt, um die Ergebnisse für jede Überprüfung zu speichern:
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 Bewertung im JSON abrufen, daher lautet meine Frage: Wie kann ich alle Leser durchlaufen und die nächsten Bewertungen abrufen? Ich muss die Bewertungen nicht in einer Liste speichern, sondern nur einmal auf das Objekt zugreifen. Jede Hilfe mehr als willkommen.

Archit Maheshwari
Sie müssen die gesamten Daten in der Liste abrufen und dann die Iteration durchführen, da es sich um eine Datei handelt und 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

Dieter
einfach als Array analysieren:
Review[] reviews = new Gson().fromJson(jsonString, Review[].class);
dann können Sie bei Bedarf auch eine Liste auf diese Weise erstellen:
List<Review> asList = Arrays.asList(reviews);
PS Ihr 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"
},
[...]
]

Konstantin Trepadus
Falls Sie es von a analysieren müssen DateiIch finde die beste Lösung, um a zu verwenden HashMap<String, String>
um es zur besseren Bearbeitung in Ihrem Java-Code 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;
}
10168400cookie-checkSo parsen Sie eine JSON-Datei mit GSONyes
Analysieren Sie die erhaltene Zeichenfolge in ein neues JSONArray(). Führen Sie für jedes Objekt im Array gson.fromJson(object, Review.class) aus und fügen Sie sie dann alle zu einer leeren List hinzu list = new LinkedList(); Analysieren Sie sie wie in alle nacheinander.
– Schaka
30. April 2015 um 10:57 Uhr