简体   繁体   中英

Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 13

I am having Json String in this format.

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

My Jsonhelper Class,

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>();


    }

And i am trying to assign that json string to a HashMap<String,CopyOfTViewsJSONS> this way,

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

But i am getting 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 am first time using json with gson library.

Can any one help me in this issue?

Thanks

Why are you trying to deserialize the JSON into a Map<String, CopyOfTViewsJSONS> ? As far as I can tell from the class and the JSON that you posted, the JSON perfectly represents one instance of the CopyOfTViewsJSONS class. You should therefore be able to deserialize it like this:

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

However, there is a slight problem with this, because the "missed" property is incorrectly mapped in your class. In your JSON example, "missed" is a String , but in the class it is a List<String> . Changing the class field to a String fixes this problem:

@JsonProperty("missed")
public String missed;

You can then print out some properties of the result to confirm it was deserialized correctly:

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}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM