com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was

可能的错误:1、bean类字段类型和字段名称不一致。

2、服务器访问得到的字符串不是纯json前面有空格和回车等字符(难发现)。

3、如果访问的json字符串不是utf-8编码时,用Gson解析会出这种问题,在日志中打印会发现json的{}前面有乱码字符,也需要注意一下。这是因为不同的编码的原因导致的,因此必须访问utf-8的json字符串,才会减少这种问题。

 

问题可能是:字符串并不是纯json字符串,开头可能会带有空字符或者回车符,这属于服务器问题,但我们也可以解决。

最重要原因的我们网络请求后结果是字符串,而不是json,因此需要处理。

 

用Gson gson = new Gson();

json = gson.fromJson(response, InfoBean.class);

解析时发现无论如何都报错误,而且InfoBean没有一点问题

并且在浏览器上访问该url能打出请求的数据,并且logcat也能打印出请求到的字符串。


浏览器这样打印好像没有问题,但是细心会发现前面有两个字符。这在解析时会使Gson无法识别。需要对请求成功的字符串进行处理,转换成标准字符串,或者告诉服务器人员修改数据。

 

排除了代码错误,我最终找到了解决办法:

java.lang.IllegalStateException: ExpectedBEGIN_OBJECT but was STRING at line 1 column 1 path $

含义:非法参数,开始读取时应该是{}括号,所以需要处理String字符串,它有可能不是标准的json数据。

 

当然,这是在排除自身bean对象有问题的前提下需要注意的,细心才能解决问题。

当然我建议,将请求的字符串要特别关注一下是否头部有问题,因为服务器端的哥们也不是特别细心的,像空格和回车特别难以发现,而且特别容易产生。希望能帮助有这样问题的朋友们。

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值