2017-09-22 3 views
2

Je suis aux prises avec un peu d'analyse JSON (avec la librairie GSON de Google).JSON Stream analyse les plantages à la fin de l'objet

Voici mon exemple de code minimal:

Gson gson = new Gson(); 
String line = "{\"method\":\"GET\",\"status\":\"200 - OK\"}"; 
AnalysisReport report = gson.fromJson(line, AnalysisReport.class); //this works 




JsonReader reader = new JsonReader(new StringReader(line)); 
reader.setLenient(true); //accept malformed input 

while (reader.hasNext()) { 
     report = gson.fromJson(reader, AnalysisReport.class); //this doesn't work 
} 

reader.close(); 

Je reçois l'exception suivante: (la chaîne est de 36 caractères de long)

Expected BEGIN_OBJECT but was END_DOCUMENT at line 1 column 37

Mon TEXTILES RAPPORT classe ressemble à ceci:

public class AnalysisReport { 
    @SerializedName("method") 
    private String method; 

    @SerializedName("status") 
    private String status; 

    AnalysisReport(){    
    } 

    public String getMethod() { 
     return method; 
    } 

    public void setMethod(String method) { 
     this.method = method; 
    } 

    public String getStatus() { 
     return status; 
    } 
} 

Je ne vois pas pourquoi mon code ne fonctionne pas. J'ai suivi le exmaple de Google

= = = = = = EDIT

La méthode reader.hasNext() retourne toujours true. Il semble que la méthode ne consomme aucun jeton du flux. Mais d'une manière ou d'une autre se déplace toujours à la fin du flux et échoue à lire des objets.

Le problème était en effet la boucle (facepalm). Cela fonctionne parfaitement bien:

JsonReader reader = new JsonReader(new StringReader(line)); 
reader.setLenient(true); //accept malformed input 
report = gson.fromJson(reader, AnalysisReport.class); 

Merci

+0

J'ai été capable de faire le mappage de votre chaîne avec la bibliothèque Jackson Json sans erreur – grsdev7

Répondre

1

Je viens de boucle enlevé et son beau travail.

String line = "{\"method\":\"GET\",\"status\":\"200 - OK\"}"; 
AnalysisReport report = new AnalysisReport(); 
Gson gson = new GsonBuilder().create(); 
JsonReader reader = new JsonReader(new StringReader(line)); 
reader.setLenient(true); //accept malformed input 

report = gson.fromJson(line, AnalysisReport.class); //this doesn't work 

reader.close(); 
System.out.println(report.toString());