【问题标题】:JsonConverter "Expected BEGIN_ARRAY but was STRING at line 1 column 1 path $"JsonConverter“预期为 BEGIN_ARRAY,但在第 1 行第 1 列路径 $ 处为 STRING”
【发布时间】:2017-04-04 23:49:30
【问题描述】:

我在尝试使用 JsonConverter 填充我的列表视图时遇到此异常

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: 应为 BEGIN_ARRAY 但在第 1 行第 1 列路径 $

这是我的 JsonConverter 类:

public class JsonConverter<T> {
public JsonConverter() {
}

public ArrayList<T> toArrayList(String jsonString, Class<T> clazz) {
    GsonBuilder builder = new GsonBuilder();
    builder.setDateFormat("dd/MM/yy HH:mm:ss");
    Gson gson = builder.create();
    JsonConverter.ListParameterizedType type = new JsonConverter.ListParameterizedType(clazz);
    ArrayList list = (ArrayList)gson.fromJson(jsonString, type);
    return list;
}

public List<T> toList(String jsonString, Class<T> clazz) {
    ArrayList list = this.toArrayList(jsonString, clazz);
    return list;
}

private static class ListParameterizedType implements ParameterizedType {
    private Type type;

    private ListParameterizedType(Type type) {
        this.type = type;
    }

    public Type[] getActualTypeArguments() {
        return new Type[]{this.type};
    }

    public Type getRawType() {
        return ArrayList.class;
    }

    public Type getOwnerType() {
        return null;
       }
   }
}

这是我的模型类:

public class Product implements Serializable {

@SerializedName("pid")
public int pid;

@SerializedName("name")
public String name;

@SerializedName("qty")
public int qty;

@SerializedName("price")
public String description;

@SerializedName("image_url")
public String image_url;

@SerializedName("date")
public String date;
}

我这样称呼它:

private ArrayList<Product> productList;

@Override
public void  processFinish(String s) {
    productList = new JsonConverter<Product>().toArrayList(s, Product.class);
.
.
.

不知道是不是我这里做错了

【问题讨论】:

  • 你能发布json吗?

标签: android json arraylist android-json


【解决方案1】:

错误消息告诉您,在将 json 转换为 java 对象时,调用期望 json 中有一个数组,但得到了一个字符串。

预期回报:

[
   "product" : {
       "key" : "value"
   }
]

再次检查你的json,它可能是一个字符串而不是一个对象

【讨论】:

  • 我的数据在 mysql 数据库中,我使用 AsynkTask 下载它们,然后将它们传递到我的 processFinish 方法中的 JsonConverter .. 使用 Eclipse IDE 时没有问题,使用 android 时出现此错误工作室,很奇怪
  • 你可能需要this
【解决方案2】:

我有一个案例,我从一个手写的 json 文件中读取。 json是完美的。但是,发生了这个错误。所以我从一个java对象写入json文件,然后从那个json文件中读取。事情很好。我看不出手写的 json 和来自 java 对象的有任何区别。尝试了beyondCompare,它没有发现任何区别。我终于注意到这两个文件大小略有不同,我使用了 winHex 工具并在下面检测到额外的东西。所以我的情况的解决方案是,复制好的json文件,将内容粘贴到其中并使用。

【讨论】:

    猜你喜欢
    • 2017-02-15
    • 1970-01-01
    • 1970-01-01
    • 2021-10-27
    • 2017-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-26
    相关资源
    最近更新 更多