Gson解析异常:Expected a BEGIN_ARRAY but was STRING at line 1 column ...

android开发中,经常需要与后台配合,从接口返回一些数据。一些数组类型的数据,后台数据库一般是字符串存储,某些接口人员不便于做转化时,会传入一些string类型的数据。gson解析时会抛异常:

//json示例
{
  array: "[1,2]"
}
//错误日志
Expected a BEGIN_ARRAY but was STRING at line 1 column ...
......

当武力值pk不过接口人员时,只能采用迂回的策略来解决了。方案如下:

List reasonList = GsonUtils.fromJson(jsonStr, 
                                                  new TypeToken>(){}.getType());

一切都是为了团队,就这样吧

突然想起另一个妥协的案列,待序列化的类定义如下,包含一个int类型。

public class RequestBean{
    public int id;
    ......
}

通过Gson的toJson方法序列化后,将序列化后的字符串作为入参向后台发起请求。此时,int类型的id有初始值0,序列化后为{id:0,...}。因为业务需要,后台接口需区分是否传入id作为筛选条件。此时为了客户端减少改动量,采用了一个讨巧的方案:将int改为Interger。一是利用java自动装箱和拆箱机制避免代码修改;二是Interger对象初始值为null,序列化后为“”。

关于TypeToken的使用,还可参考另一篇文章Gson解析泛型对象时TypeToken的使用方法

你可能感兴趣的:(Gson解析异常:Expected a BEGIN_ARRAY but was STRING at line 1 column ...)