android - Json conversion with GSON: Expected BEGIN_ARRAY but was BEGIN_OBJECT -
for learning purpose want build simple android rest client using retrofit , gson. json string want parse:
{ "kind": "listing", "data": { "modhash": "qo2fwmjj5iee4adde638f97d5a7063087439bf4985aab4c9a5", "children": [ { "kind": "t5", "data": { "banner_img": "",.... my data model:
public class response { @serializedname("kind") private string kind; @serializedname("data") private data data; public string getkind() { return kind; } public void setkind(string kind) { this.kind = kind; } public data getdata() { return data; } public void setdata(data data) { this.data = data; } } public class data { @serializedname("modhash") private string modhash; @serializedname("after") private string after; @serializedname("before") private string before; @serializedname("children") private list<child> children; public string getmodhash() { return modhash; } public void setmodhash(string modhash) { this.modhash = modhash; } public string getafter() { return after; } public void setafter(string after) { this.after = after; } public string getbefore() { return before; } public void setbefore(string before) { this.before = before; } public list<child> getchildren() { return children; } public void setchildren(list<child> children) { this.children = children; } } public class child { @serializedname("kind") private string kind; @serializedname("data") private list<sub> data; public string getkind() { return kind; } public void setkind(string kind) { this.kind = kind; } public list<sub> getdata() { return data; } public void setdata(list<sub> data) { this.data = data; } } unit test:
public class test { private gsonconverter gsonconverter; private gson gson; private logger logger = logger.getlogger(test.class.getname()); public test() { gson = new gsonbuilder() .setdateformat("yyyy'-'mm'-'dd't'hh':'mm':'ss'.'sss'z'") .create(); gsonconverter = new gsonconverter(gson); } @test public void testdata() { response response = gson.fromjson(testutil.response_string, response.class); logger.info("data " + response.getdata()); assert.assertnotnull(response.getdata()); } } so when parser reaches "children" attribute, following error occurs.
caused by: java.lang.illegalstateexception: expected begin_array begin_object @ com.google.gson.internal.bind.jsontreereader.expect(jsontreereader.java:139) @ com.google.gson.internal.bind.jsontreereader.beginarray(jsontreereader.java:58) @ com.google.gson.internal.bind.collectiontypeadapterfactory$adapter.read(collectiontypeadapterfactory.java:79) @ com.google.gson.internal.bind.collectiontypeadapterfactory$adapter.read don't know do, tried different things, have handle "children" myself because of [ bracket?
field data in child class shouldn't list. object in json make object in data model.
Comments
Post a Comment