最近做毕设碰到一个问题,我访问的接口,传回来的数据是 [{},{},{}]这个类型,还有[[{},{}],[{},{}]] 这个类型。
一开始没有注意,直接用Android studio 的插件GsonFormate。直接运行之后报错。
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $
意思大概是说:期待的是个BEGIN_OBJECT类,但是得到的却是个BEGIN_ARRAY类。然后我试遍了谷哥和度娘的方法,还是没有解决。我差点觉得我要毕不了业了。
于是。。。我去上了个厕所(好吧,跟这个没有关系)回来之后,我决定操作一下,把返回的数据强行改成BEGIN_OBJECT类,也就是常规的JSON数据格式。
对于第一个类型[{},{},{}]
json = "{\"rows\":"+json+"}";
就是在外面加上{} 然后在加上“rows”: 就可以了
我正准备性高彩烈的准备做下一个功能,但是我居然发现,上面哪个方法不行了。我就奇了怪了。然后用postman一测试,发现饭后返回的数据居然是[[{},{}],[{},{}]] ,对于后台我真的是****口吐芬芳。对于第二个类型[[{},{}],[{},{}]] 于是这么处理了。
String processData =json.substring(0,json.indexOf("[{"))
+ "{\"curriculum\":"
+json.substring(json.indexOf("[{"),json.indexOf(",["))
+"},{\"data\":"
+json.substring(json.indexOf(",[")+1,json.indexOf("]]")+1)
+"}"
+json.substring(json.indexOf("]]")+1);
json = "{\"raw\":"+processData+"}";
这里用到分割字符串的办法。substring(起始位置,终点位置);substring(起始位置)【没有终点就默认到尾】
PS:以上的方法具有很高的局限性和不灵活性。但是我也冇得办法,真的搞了一天。我也纳闷。如果有大神路过不慎点到这篇文章,请多多指教。我定俯身侧耳以请的。