【问题标题】:com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRINGcom.google.gson.JsonSyntaxException:java.lang.IllegalStateException:应为 BEGIN_ARRAY 但为 STRING
【发布时间】:2014-01-15 01:34:16
【问题描述】:

这是我第一个使用 Gson 进行序列化的方法。我收到 Facebook 对我的 android 应用程序的响应,像这样

我的 Json:

 {"data": [
    {
        "pic_square": "https://fbcdn-profile-a.akamaihd.netxxxx1388091435_797626998_q.jpg",
        "uid": "10202xxx852765",
        "name": "Mister X"
    },
    {
        "pic_square": "https://fbcdn-profile-a.akamaihd.netxxxx1388091435_797626998_q.jpg",
        "uid": "10202xxx852765",
        "name": "Mister X"
    }
   ]
}



    try {
       final GsonBuilder builder = new GsonBuilder();
       final Gson gson = builder.create();
       JSONObject data= response.getGraphObject().getInnerJSONObject();             
       FacebookResponses facebookResponses= gson.fromJson(data.toString(),FacebookResponses.class); //exception here
       Log.i(TAG, "Result: " + facebookResponses.toString());
    } catch (JsonSyntaxException e) {
        e.printStackTrace();

} 我的课

public class FacebookResponses implements Serializable {
  private static final long serialVersionUID = 1L;
      @SerializedName("data");
      private FacebookRisp[] data;
}

class FacebookRisp implements Serializable {

    private static final long serialVersionUID = 1L;

   @SerializedName("pic_square")
   private String[] pic_square;

   @SerializedName("uid")
   private String[] uid;

   @SerializedName("name")
   private String[] name;

   public String[] getPic_square() {
        return pic_square;
   }

   public void setPic_square(String[] pic_square) {
    this.pic_square = pic_square;
   }

    public String[] getUid() {
    return uid;
   }

   public void setUid(String[] uid) {
    this.uid = uid;
   }

   public String[] getName() {
    return name;
   }

   public void setName(String[] name) {
    this.name = name;
   }

 }

我明白了 com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:应为 BEGIN_ARRAY,但在第 1 行第 118 列为 STRING

更新: 我修改了爱琴海的答案,问题是[]

@SerializedName("pic_square")
private String**[]** pic_square;   //ex here and others

【问题讨论】:

    标签: java android serialization facebook-fql gson


    【解决方案1】:

    将您的 FacebookResponses 类更改为这些:

    private class FacebookResponses {
        private Data[] data;
    }
    
    private class Data {
        @SerializedName("pic_square")
        private String picSquare;
        private String uid;
        private String name;
    }
    

    编辑:因为您的 json 响应的结构如下:

    【讨论】:

    • 我像你在上面看到的那样编辑了我的课程,但我总是得到同样的错误:'(
    【解决方案2】:

    MalformedJsonException 当阅读器遇到格式错误的 JSON 时抛出。调用 setLenient(boolean) 可以忽略一些语法错误。

    很难找到解决方案,但您的 JSON 响应似乎无效。 Check here

    【讨论】:

    • 我收到了来自 facebook 的 fql 的回复。如果我把 "data":[{"pic_square":"https:\/\/fbcdn-profile-a.akamaihd.net\/xxx.jpg", "uid":"1020272xxxx852765","name ":"Mister X"} 但是如何从响应中自动提取正确的信息?
    • 尝试使用其他一些测试参数,或者您可能没有正确调用该 API。(参数的平均数)
    • 好的,我知道了。现在我添加了正确的 Json: JSONObject data= response.getGraphObject().getInnerJSONObject();字符串数据字符串 = data.toString();但我得到 com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 118
    • 更新您问题中的响应代码并“更新”新事物
    • 我做到了。你可以在上面看到
    猜你喜欢
    • 2021-05-27
    • 2020-06-21
    • 1970-01-01
    • 1970-01-01
    • 2015-11-06
    • 1970-01-01
    • 1970-01-01
    • 2015-11-30
    相关资源
    最近更新 更多