JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY
程序员文章站
2024-01-28 16:53:28
...
今天在读取本地【assets文件下的.json】数据并用Gson解析解析时报了以下错误。
Caused by: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $
【JsonSyntaxException:Json数据解析异常】
【BEGIN_OBJECT but was BEGIN_ARRAY:期望返回一个对象但是返回了一个数组】
原代码:
解决办法:
//这是我读取.json文件,数据已经读取到
String strJsonData = getJson( mContext,"bankname.json");
//确保本地bean类封装成集合 用TypeToken转一下
List<BankData.DataBean> data = fromToJson(strJsonData,new TypeToken<List<BankData.DataBean>>(){}.getType());
// An highlighted block
public <T> T fromToJson(String json, Type listType){
Gson gson = new Gson();
T t = null;
t = gson.fromJson(json,listType);
return t;
}
????另外在解决问题时也总结了以下可能报这种错误的情况:
-
1、bean类字段类型和请求数据字段类型不一致。
-
2、服务器访问得到的字符串不是纯json前面有空格和回车等字符。
-
3、如果访问的json字符串不是utf-8编码时,用Gson解析会出这种问题,在日志中打印会发现json的{}前面有乱码字符,也需要注意一下。这是因为不同的编码的原因导致的,因此必须访问utf-8的json字符串,才会减少这种问题。
。。。解决呐可以直接让后台大哥给改一下或者自己解决。。。
推荐阅读
-
JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY
-
Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path
-
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected an int but was STRING
-
Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path