java - com.google.gson.JsonSyntaxException : java. lang.IllegalStateException:应为 BEGIN_ARRAY 但为 STRING

标签 java android serialization facebook-fql gson

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

我的杰森:

 {"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();

} 我的类(class)

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

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

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

最佳答案

将您的 FacebookResponses 类更改为:

private class FacebookResponses {
    private Data[] data;
}

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

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

enter image description here

关于java - com.google.gson.JsonSyntaxException : java. lang.IllegalStateException:应为 BEGIN_ARRAY 但为 STRING,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20801029/

相关文章:

给定列表时,Java containsAll 不返回 true

java - 在 Java 中反序列化 Map<byte[], byte[]>

C# XML 序列化

c# - 如何使用 json.net 反序列化派生类

Java 将值传递到 SQL WHERE 子句中的 IN

java - 如何仅从键盘获取整数输入,如果输入无效,如何再次询问用户?

android - 如何通过外部按钮在 ListView 中设置可见性?

android - 如何从 Android 中的 Google map 小部件中删除 "find me"按钮?

java - 该计算器不断执行加法

android-sqlite - 我们可以对外部数据库文件执行sql操作吗?安卓