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

我正面临一个关于GSON json到Java的问题。 我查了很多post,但找不到解决scheme。 所以我列出我的问题在这里。我试图让数据有一个在JSON中的地图,但我无法检索数据。 在我的日志中,我能够看到只有这么多的数据才会抛出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" } } } } } ] } } 

编辑

这是我的networking类用于parsing

 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<String, KeyMap> keyMap; public Map<String, KeyMap> getKeyMap() {return keyMap;} public void setKeyMap(Map<String, KeyMap> 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; } } 

Solutions Collecting From Web of "java.lang.IllegalStateException:期望BEGIN_OBJECT,但在第1行第62列是STRING"

其实你得到错误BEGIN_OBJECT but was STRING因为gson期望对象不是string,它也是一个对象在JSON中,你有错误的映射你的类的类,你没有发布的Bean,简单的类粘合代码在这里。

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

 public class ProductInfo { private boolean success; private Map<String, String[]> 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<Result> 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<String, KeyMap> 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); 

请享用 :)