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

解析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());


  
    

猜你喜欢

转载自blog.csdn.net/Mr_li13/article/details/71678792