java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 39 path $

我在使用retrofit和Gson配合时,出现了这个问题,疑惑中乱七八糟瞎搞了一个下午没有解决。期间怀疑Gson解析不能使用泛型(因为我的解析使用了泛型),后来又觉得可能是我的关键字正好是解析器的某个关键字导致的异常,也打算过自定义Gson的解析过程,其实这些都不是。
第二天才搞明白,真正的问题是我的数据结构有问题,或者说我的解析出现了问题。
例如下面Json字符串:
{"code":1,"info":"success","results":{"id":"1","name":"hehe"}}
results对应的应该是一个实体类,如果这个时候想把他解析为String或者List就会出现异常。
如果参考使用GsonForm处理后的数据模型,几乎不会出现问题;加入result后面的内容可能在请求时会因为某些原因会存在格式上的变化,这个时候就有出现该异常的风险。Gson中,关键字后面出现""引起来的内容将会被只认为是STRING,“{}”只被认为是类,“[]”只被认为是List,这个几乎是强制性的。
就是说如果你的实体预计是获取String的变量,但是关键字后面对应的却出现了“{”或“[”,那么这个转换将被认为是错误的,抛出异常。
解决办法:后台输出稳定的Gson格式。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,843评论 25 709
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,067评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,785评论 18 399
  • (一)愿你能被世界温柔以待 公司来了个新员工,爸妈一般的年纪,喜欢旅游、健谈是个可爱的人儿。 或许因为她的女儿跟我...
    踏马走过的青春阅读 305评论 0 0
  • 元规律第一次听过哪些人说呢?李笑来、易仁永澄、日日。今天,也是一件小事,大概也比较深刻认识了元规律。 来深圳一个多...
    闻舒阅读 792评论 1 0