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

来源:互联网 发布:pinyinime 源码 编辑:程序博客网 时间:2024/05/19 05:33

解析json字符串出现这个错误:

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1

这是报的错误 这是我写的bean类 public class NewsJsonToBean { public String errNum; public GetNews retDa...


分析原因:
List<Person> ps = gson.fromJson(str, new TypeToken<List<Person>>(){}.getType());  
GSON提供了 TypeToken 这个类来帮助我们捕获(capture)像List<MyZhuiHaoDetailModel>这样的泛型信息。


不是我们这句代码错误了,是因为实际开发中,我们获取数据都是通过网络接口从服务器获取数据,这些数据的格式都是后台写的,这就存在了人为可能造成的数据错误。
图片:


注意这种后台回传的数据格式: 最外层还是“”--字符串,里面是[] --数组,但是数组中,又是“”--字符串,字符串中又是[],然后才是{},我们需要的字典。


解决方案:
参考资料:http://www.open-open.com/lib/view/open1472632967912.html

//换这个方式        //Json的解析类对象        //将JSON的String 转成一个JsonArray对象        JsonParser jsonParser = new JsonParser();        JsonArray jsonArray = jsonParser.parse(str).getAsJsonArray();        Gson gson = new Gson();        //加强for循环遍历JsonArray        for (JsonElement user : jsonArray) {            //使用GSON,直接转成Bean对象            Course userBean = gson.fromJson(user, Course.class);            coursesList.add(userBean);        }//这种方式不用        //coursesList = gson.fromJson(str,new TypeToken<List<Course>>(){}.getType());


  
    

0 1
原创粉丝点击