2016-03-18 7 views
2

Ich habe Json String in diesem Format.Erwartete BEGIN_OBJECT aber war BEGIN_ARRAY in Zeile 1 Spalte 13

{ 
    "columns": ["One", "Two", "Three"], 
    "columnNames": ["One", "Two", "Three"], 
    "isCTemplate": [true, true, true], 
    "isCrequired": [false, false, false], 
    "columnSizes": [10, 50, -1], 
    "columnFormats": ["TEXT", "TEXT", "BOOLEAN(true/false)"], 
    "parseErrors": null, 
    "data": [ 
     ["a", "f", "8"], 
     ["b", "e", "82"], 
     ["c", "d", "822"] 
    ], 
    "numberOfRecordsInserted": 0, 
    "dataErrors": [null, null, null], 
    "dataWarnings": ["1", "2", "3"], 
    "templateCH": ["One", "Two", "Three"], 
    "importS": [null, null, null], 
    "formatTypeMap": { 
     "array": "TEXT", 
     "boolean": "BOOLEAN(true/false)", 
     "currency": "CURRENCY" 
    }, 
    "TypeId": "acc", 
    "isColumn": [false, false, false], 
    "prefixed": [], 
    "missed": "tEST", 
    "duplicateS": null, 
    "global": null, 
    "y": 0, 
    "s": 1, 
    "m": 2, 
    "f": 3, 
    "vStatus": { 
     "vRows": 5, 
     "v": 5 
    } 
} 

Meine Jsonhelper Klasse,

public class CopyOfTViewsJSONS { 
    @JsonProperty("columns") 
    public List<String> columns=new ArrayList<String>(); 

    @JsonProperty("columnNames") 
    public List<String> columnNames=new ArrayList<String>(); 

    @JsonProperty("isCTemplate") 
    public List<String> isCTemplate=new ArrayList<String>(); 

    @JsonProperty("isCrequired") 
    public List<String> isCrequired=new ArrayList<String>(); 

    @JsonProperty("columnSizes") 
    public List<String> columnSizes=new ArrayList<String>(); 

    @JsonProperty("columnFormats") 
    public List<String> columnFormats=new ArrayList<String>(); 

    @JsonProperty("parseErrors") 
    public List<String> parseErrors=new ArrayList<String>(); 

    @JsonProperty("data") 
    public List<List<String>> data=new ArrayList<List<String>>(); 

    @JsonProperty("numberOfRecordsInserted") 
    public int numberOfRecordsInserted; 

    @JsonProperty("dataErrors") 
    public List<String> dataErrors=new ArrayList<String>(); 

    @JsonProperty("dataWarnings") 
    public List<String> dataWarnings=new ArrayList<String>(); 

    @JsonProperty("templateCH") 
    public List<String> templateCH=new ArrayList<String>(); 

    @JsonProperty("importS") 
    public List<String> importS=new ArrayList<String>(); 

    @JsonProperty("formatTypeMap") 
    public HashMap<String, String> formatTypeMap=new HashMap<String, String>(); 

    @JsonProperty("TypeId") 
    public String TypeId; 

    @JsonProperty("prefixed") 
    public List<String> prefixed=new ArrayList<String>(); 

    @JsonProperty("missed") 
    public List<String> missed=new ArrayList<String>(); 

    @JsonProperty("duplicateS") 
    public List<String> duplicateS=new ArrayList<String>(); 

    @JsonProperty("global") 
    public List<String> global=new ArrayList<String>(); 

    @JsonProperty("Y") 
    public int Y; 

    @JsonProperty("s") 
    public int s; 

    @JsonProperty("m") 
    public int m; 

    @JsonProperty("f") 
    public int f; 

    @JsonProperty("vStatus") 
    public HashMap<String, String> vStatus=new HashMap<String, String>(); 


    } 

Und ich versuche, auf eine HashMap<String,CopyOfTViewsJSONS> auf diese Weise, dass die JSON-String zuweisen

HashMap<String,CopyOfTViewsJSONS> mapsss = new Gson().fromJson(tmp, new TypeToken<HashMap<String, CopyOfTViewsJSONS >>(){}.getType()); 

Aber ich bin immer java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 13<br />com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 13 Exception.

I bin das erste Mal mit Json mit Gson-Bibliothek.

Kann jemand mir in dieser Ausgabe helfen?

Dank

+0

Versuchen Sie, diese 'Gson Gson = new GsonBuilder () .setLenient(). create(); ' –

+0

@Matthew muss dies vor dem Zuweisen zu hashmap hinzufügen? – Sandy

+0

Sie würden es anstelle von 'new Gson() verwenden. FromJson (...' statt 'gson.fromJson (tmp, ...' –

Antwort

3

Warum versuchen Sie die JSON in eine Map<String, CopyOfTViewsJSONS> deserialisieren? Soweit ich aus der Klasse und dem von Ihnen geposteten JSON ersehen kann, repräsentiert der JSON perfekt eine Instanz der Klasse CopyOfTViewsJSONS. Sie sollten daher in der Lage sein, es so deserialisieren:

CopyOfTViewsJSONS result = new Gson().fromJson(tmp, CopyOfTViewsJSONS.class); 

Es besteht jedoch ein kleines Problem mit dieser ist, weil die "missed" Eigenschaft falsch in Ihrer Klasse zugeordnet ist. In Ihrem JSON-Beispiel ist "missed" ein String, aber in der Klasse ist es ein List<String>. Ändern des Klassenfeldes zu einem String behebt dieses Problem:

@JsonProperty("missed") 
public String missed; 

Sie können dann einige Eigenschaften des Ergebnisses auszudrucken, um zu bestätigen es richtig deserialisiert wurde:

System.out.println(result.columns);     // prints [One, Two, Three] 
System.out.println(result.numberOfRecordsInserted); // prints 0 
System.out.println(result.TypeId);     // prints acc 
System.out.println(result.vStatus);     // prints {v=5, vRows=5} 
Verwandte Themen