java.lang.IllegalStateException:预期BEGIN_OBJECT但在第1行第62列是STRING

我正面临着关于GSON json到Java的问题。 我在这里查了很多post,但是找不到我的问题的解决方案。 所以我在这里列出我的问题。我正在尝试获取数据,在json中有一个Map,但我无法检索数据。 在我的日志中,我能够看到只有这么多数据才会出现然后抛出exception。 有人请指导我一个方法。 非常感谢 !

这是我的Json数据,用于点击我正在处理的Android应用程序的URL

编辑

{ "success" : true, "messages" : { "success" : [ "SEARCH_QUERY_SUCCESS" ] }, "session" : { "id" : "cn694ivr8bmqnrveh9n8841oh7", "expire" : "", "YII_CSRF_TOKEN" : "4fa0ae103b547836241f5278311839b407050919" }, "metadata" : { "product_count" : "4458", "category_ids" : "3", "results" : [{ "id" : "105089", "data" : { "sku" : "MA851AA10ZLX", "name" : "Alexa Mid Rise Super Skinny Leg", "new-product" : false, "url" : "http:\/\/theiconic.bugfoot.de\/mobile-api\/Alexa-Mid-Rise-Super-Skinny-Leg-105089.html", "simples" : { "MA851AA10ZLX-406437" : {}, "MA851AA10ZLX-406438" : {}, "MA851AA10ZLX-406439" : {}, "MA851AA10ZLX-406440" : {}, "MA851AA10ZLX-406441" : {}, "MA851AA10ZLX-406442" : {}, "MA851AA10ZLX-406443" : {}, "MA851AA10ZLX-406444" : { "meta" : { "sku" : "MA851AA10ZLX-406444", "price" : "149.99", "caching_hash" : "78ddaaf930f8bd0e0bf595c25643683d", "shipment_cost_item" : "0.00", "shipment_cost_order" : "0.00", "tax_percent" : "10.00", "quantity" : "2", "cost" : "64.09", "size_brand" : "W31\/L34", "size" : "W31\/L34", "size_position" : "200", "3hours_shipment_available" : true, "estimated_delivery" : "", "estimated_delivery_position" : "" }, "attributes" : { "sort_order" : "0", "size" : "W31\/L34" } } } } } ] } } 

编辑

这是我用于解析的网络类

 String jsonString = null; try { HttpGet httppost = new HttpGet(URL); HttpClient httpClient = new DefaultHttpClient(); if (httpClient != null) { HttpResponse response = httpClient.execute(httppost); BufferedReader reader = new BufferedReader( new InputStreamReader( response.getEntity().getContent(), "UTF-8")); jsonString = reader.readLine(); } } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(jsonString); if (jsonString != null) { Bean obj=new Gson().fromJson(jsonString, Bean.class); Message msg = new Message(); msg.obj = obj; responseHandler.sendMessage(msg); //obj can be sent to a handler } } } 

这是包含Map的Simples Bean类

 public class Simples { private Map keyMap; public Map getKeyMap() {return keyMap;} public void setKeyMap(Map keyMap) {this.keyMap = keyMap;}} 

这是我的KeyMap Bean类

 public class KeyMap { private Meta meta; private Attributes attributes; public Meta getMeta() { return meta; } public void setMeta(Meta meta) { this.meta = meta; } public Attributes getAttributes() { return attributes; } public void setAttributes(Attributes attributes) { this.attributes = attributes; } } 

实际上你得到错误BEGIN_OBJECT but was STRING是因为gson期望对象不是字符串,也是json中的对象,你在Bean类中映射了你的类,你没有在这里发布Bean,Simple类粘合代码。

你可以像这样映射JSON模型类

 public class ProductInfo { private boolean success; private Map messages; private SessionData session; private MetaData metadata; } public class SessionData { private String id; private String expire; private String YII_CSRF_TOKEN; } public class MetaData { private String product_count; private String category_ids; private List results; } public class Result { private String id; private Data data; } public class Data { private String sku; private String name; @SerializedName(value = "new-product") private String newProduct; private String url; Map simples; } public class KeyMap { private Meta meta; private Attributes attributes; } public class Meta { private String sku;; private String price; private String caching_hash; private String shipment_cost_item; private String shipment_cost_order; private String tax_percent; private String quantity; private String cost; private String size_brand; private String size; private String size_position; @SerializedName(value = "3hours_shipment_available") private String hours_shipment_available; private String estimated_delivery; private String estimated_delivery_positio; } public class Attributes { private String sort_order; private String size; } 

最后反序列化它

 ProductInfo productInfo = gson.fromJson(reader, ProductInfo.class); 

请享用 :)