2012-04-03 18 views
1

Ich versuche, etwas zusammenzusetzen, um eine JSON-Zeichenfolge zu entschlüsseln und nicht viel Glück zu haben.Json/Gson Problem - Warum bekomme ich null?

Im Moment versuche ich eine Datei zu lesen und diese in ihre Komponenten zu parsen. Ich kann den Statuswert gut lesen, aber wenn ich versuche, die Liste zu lesen, bekomme ich null, und ich verstehe nicht warum.

Kann mir jemand zeigen, was ich falsch mache? Hier

ist der Inhalt der Datei:

{ 
    "results" : [ 
     { 
      "long_name" : "Long Name 1", 
      "short_name" : "Short Name 1" 
     }, 
     { 
      "long_name" : "Long Name 2", 
      "short_name" : "Short Name 2" 
     } 
    ], 
    "status" : "OK" 
} 

Hier ist der Code Ich verwende die Datei zu analysieren, nachdem er gelesen wird:

  BufferedReader br = 
      new BufferedReader(new FileReader(aFile)); 
      StringBuilder builder = new StringBuilder(); 
      String st; 
      for (String line = null; (line = br.readLine()) != null;) 
      { 
       st = line.trim(); 
       builder.append(st); 
      } 
      br.close(); 
      String data = builder.toString(); 
      Results rslt = new Gson().fromJson(data, Results.class); 
      List<ResultsData> resultsData = rslt.getResultsData(); 
      System.out.println("ResultsData  : "+resultsData);  // This is null 
      System.out.println("Status   : "+rslt.getStatus()); // This is OK 

Hier sind die beiden Klassen ich verwende für die Analyse:

import java.util.List; 

public class Results { 

    private List<ResultsData> resultsData; 
    public List<ResultsData> getResultsData() { return resultsData; } 
    public void setResultsData(List<ResultsData> l) { resultsData = l; } 

    private String status; 
    public String getStatus() { return status; } 
    public void setStatus(String s) { status = s; } 

} 

Und

public class ResultsData { 

    private String long_name = ""; 
    public String getLong_name() {return long_name;} 
    public void setLong_name(String s) { long_name = s; } 

    private String short_name = ""; 
    public String getShort_name() {return short_name;} 
    public void setShort_name(String s) { short_name = s; } 

} 

Antwort

1

Ich würde vermuten, es ist, weil die JSon Datei in der Result Klasse results und das entsprechende Feld sagt wird resultsData genannt. Mit anderen Worten: Das Schema stimmt nicht überein. Wie sieht dein Schema aus?

+2

+1 Außerdem sieht es so aus, als ob Sie diese Annotation '@SerializedName (" name ")' hinzufügen können, um dieses Problem zu umgehen, ohne Ihren Java-Code zu ändern. Alternativ können Sie die 'FieldNamingPolicy' –

+0

^guten Punkt :) == 1 UP von mir! – Kiril

+0

Danke, Offensichtlich bin ich ein Gson/Json-Neuling. Ich bin mir nicht sicher, was der Verweis @SerializedName ("Name") bedeutet. Kannst du etwas erklären? – Burferd

Verwandte Themen