• 近年来在做一个私家业余项目
    由于这一个序列中都是利用的网络上的当众的api接口的数额
  • 这一个数量均再次来到的是json格式的数据,数据不是出自一个网站,格式就千奇百怪了。
  • 其间哔哩哔哩BiliBili本条接口有多少个坑爹的地点。

    坑爹的key

  • 以此字段Key是数字,那就不能用Gson,法斯特Json来分析了。那就要求团结手动解析了。

type不连续
  • 先是分析那一个Json字符串,type的号码不是连连的,那里可以用迭代器依据key的值来遍历出value的值,然后将值存入List<String>中去

JSONObject root = new JSONObject(json);
Iterator<String> rootKeys = root.keys();
while (rootKeys.hasNext()) {    
String next = rootKeys.next(); 
mTypeList.add(root.getString(next));}  //将type类型剥离出来存放到字符串集合mTypeList中

type里面包蕴Object和num

  • 下一场从集合中取出type的value剥离出0,1这一个条款数,那里忽略了num这么些字段,因为num的层系和item是同一个层次

for (int i = 0; i < mTypeList.size(); i++) {    
JSONObject type = new JSONObject(mTypeList.get(i));
Iterator<String> typeKeys = type.keys();
while (typeKeys.hasNext()) {        
String next = typeKeys.next(); 
 if (type.getString(next).startsWith("{")) {            
BiliBiliModel model = JsonUtils.fromJson(type.getString(next), BiliBiliModel.class); //将item转化成Model实体       
mModelList.add(model);   //将model存入List<BiliBiliModel> mModelList; 集合中
  }    }}

解析json的全部代码

  • 地点是自身想以此难点的笔触,后来简化了一晃代码,看起来没什么难点,通过日记分析,在其次个while循环里面就不得不加载一条数据,真是见鬼。

以下是错误代码、以下是错误代码、以下是错误代码 重要的问题拷贝三遍。
JSONObject root = new JSONObject(json);
Iterator<String> rootKeys = root.keys();
while (rootKeys.hasNext()) {    
String next = rootKeys.next();   
 JSONObject type = new JSONObject(root.getString(next)); 
Iterator<String> typeKeys = type.keys();
while (typeKeys.hasNext()) {        
  String typeNext = typeKeys.next(); 
if (type.getString(typeNext).startsWith("{")) { 
 mModelList.add(JsonUtils.fromJson(type.getString(next), BiliBiliModel.class)); 
           }
       }
    }

若果有大神知道代码的难题所在,请告诉,相当感谢。

compile 'com.code19.library:library:0.0.6'

如上完整代码参考
https://github.com/h4de5ing/read/blob/master/app/src/main/java/com/code19/read/model/BiliBiliBiz.java
https://github.com/h4de5ing/read/blob/master/app/src/main/java/com/code19/read/domain/BiliBiliModel.java

  • 您认为你就成功解析所有的数码了,太尼玛天真了,看图

左右类型不平等,坑爹啊

  • BiliBiliModel那么些model是用GsonFormat生成的,所以生成的play字段是int型,可是解析到这一条的是个字符串,程序及时就完蛋了,修改成String型就足以了。

总结:

  • 初期打开的这一个接口的时候,没有细看第一想方设法是用Gson解析,把json字符串复制到GsonFormat中的时候报data
    err错误,才意识有0那种字段
  • 手动解析常用的多少个类是JSONObject、JSONArray、JSONTokener这几个类,网络上一大把介绍用那多少个类来手动解析json的,不过不适用哔哩哔哩那里的大方数码,而且字段名称、字段类型可变的气象。

参考:

https://github.com/h4de5ing/read
https://github.com/h4de5ing/AndroidCommon

相关文章

网站地图xml地图