我有这种格式的Json String。
{
"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
}
}
我的Jsonhelper班,
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>();
}
我试图以这种方式将json字符串分配给HashMap<String,CopyOfTViewsJSONS>
,
HashMap<String,CopyOfTViewsJSONS> mapsss = new Gson().fromJson(tmp, new TypeToken<HashMap<String, CopyOfTViewsJSONS >>(){}.getType());
但我得到了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.
我第一次使用json和gson库。
任何人都可以帮我解决这个问题吗?
由于
答案 0 :(得分:3)
为什么要尝试将JSON反序列化为Map<String, CopyOfTViewsJSONS>
?据我所知,从你发布的类和JSON中,JSON完美地代表了CopyOfTViewsJSONS
类的一个实例。因此,您应该能够像这样反序列化它:
CopyOfTViewsJSONS result = new Gson().fromJson(tmp, CopyOfTViewsJSONS.class);
但是,这有一个小问题,因为"missed"
属性在您的类中被错误地映射。在您的JSON示例中,"missed"
是String
,但在类中它是List<String>
。将类字段更改为String
可解决此问题:
@JsonProperty("missed")
public String missed;
然后,您可以打印出结果的某些属性,以确认它是否已正确反序列化:
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}