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,因此需要处理。

 com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was_第1张图片

用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对象有问题的前提下需要注意的,细心才能解决问题。

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

你可能感兴趣的:(android,gson,android)