android报错 Expected BEGIN_OBJECT but was STRING at line 1 column 39 path $
2016-07-08 18:23
621 查看
我在使用retrofit和Gson配合时,出现了这个问题,疑惑中乱七八糟瞎搞了一个下午没有解决。期间怀疑Gson解析不能使用泛型(因为我的解析使用了泛型),后来又觉得可能是我的关键字正好是解析器的某个关键字导致的异常,也打算过自定义Gson的解析过程,其实这些都不是。
第二天才搞明白,真正的问题是我的数据结构有问题,或者说我的解析出现了问题。
例如下面Json字符串:
{"code":1,"info":"success","results":{"id":"1","name":"hehe"}}
results对应的应该是一个实体类,如果这个时候想把他解析为String或者List就会出现异常。
如果参考使用GsonForm处理后的数据模型,几乎不会出现问题;加入result后面的内容可能在请求时会因为某些原因会存在格式上的变化,这个时候就有出现该异常的风险。Gson中,关键字后面出现""引起来的内容将会被只认为是STRING,“{}”只被认为是类,“[]”只被认为是List,这个几乎是强制性的。
就是说如果你的实体预计是获取String的变量,但是关键字后面对应的却出现了“{”或“[”,那么这个转换将被认为是错误的,抛出异常。
解决办法:后台输出稳定的Gson格式。
第二天才搞明白,真正的问题是我的数据结构有问题,或者说我的解析出现了问题。
例如下面Json字符串:
{"code":1,"info":"success","results":{"id":"1","name":"hehe"}}
results对应的应该是一个实体类,如果这个时候想把他解析为String或者List就会出现异常。
如果参考使用GsonForm处理后的数据模型,几乎不会出现问题;加入result后面的内容可能在请求时会因为某些原因会存在格式上的变化,这个时候就有出现该异常的风险。Gson中,关键字后面出现""引起来的内容将会被只认为是STRING,“{}”只被认为是类,“[]”只被认为是List,这个几乎是强制性的。
就是说如果你的实体预计是获取String的变量,但是关键字后面对应的却出现了“{”或“[”,那么这个转换将被认为是错误的,抛出异常。
解决办法:后台输出稳定的Gson格式。
相关文章推荐
- android报错 Expected BEGIN_OBJECT but was STRING at line 1 column 39 path $
- [精通Objective-C]进阶技巧:使用运行时系统API
- iOS 里面 Swift与Objective-C混编,Swift与C++混编的一些比较
- objective-C之 NSPredicate(谓词)
- Objective-C——Category、Extension、Protocol
- iOS学习(十五)Objective-C 方法的覆盖
- javascript 引用类型 - Object类型
- java.rmi.NoSuchObjectException: no such object in table
- JSONObject json
- ProtocolBuffer for Objective-C 运行环境配置及使用
- Windows下的Objective-C集成开发环境(IDE)
- [翻译]Objective-C 2015新特性
- ProtocolBuffer for Objective-C 运行环境配置及使用
- Objective-C字符串处理方法大全
- Call to a member function display() on a non-object问题的解决
- iOS开发必读-GitHub 上Top100 的 Objective-C 项目
- 李洪强iOS开发之【Objective-C】09-空指针和野指针
- Error:Cannot locate factory for objects of type DefaultGradleConnector, as ConnectorServiceRegistry
- Jackson框架的JsonGenerator、ObjectMapper - Json-lib框架的JsonObject、JsonArray
- git“fatal: loose object”错误解决办法汇总