android json 动态key,Android json解析动态获取key以及解析技巧

此篇讲解保存json数据的小技巧。使用JSONObject和JSONArray解析

实例:

{"code":"1","name":"kongge","age":22,"date":[{"userId":"123","userPwd":"456"},{"userId":"321","userPwd":"789"}]} // @1

{"code":"1","name":"ggg","age":23,"date":{"like":"game","fruit":"apple"}} // @2

{"code":"1","name":"ggg","age":24,"date":{"sex":"man","like":"play","fruit":"banana"}} // @3

{"code":"0","error":"I'm sorry!"} // @4

规则:此类json数据固定有code字段,当code=1时,固定有name,age和data字段,但是data字段有时候会是数组对象,有时候会是单个对象,并且每一种json数据里面的data对象里面的字段不一定一样。当code=0时,有固定字段error;

问题:怎么解析和保存这些数据?

一般解决方法:1.每种json数据写一个实体类,字段名一一对应。2.每种json数据写一个解析,然后保存到实体类中。

缺陷:如果json数据里data字段里面的字段种类很多且大多各不相同,若有20条,就得写二十个实体类加二十个解析函数,工作量大效率低。

小结:上述一类json有很多共同点,其实只需要用一个实体类和一个解析函数就可以了。

改进方法和技巧:

1.既然code和name,age,error是固定的,只是有或没有,不妨将其全加入Mode类中。解析时先判断code是否为1,区分对待赋值。

2.data字段比较特殊,因为其有可能只是单纯的JSONObject,也有可能是JSONArray,里面所包含的字段名也不一定一样,这时,可以将data数组看成List>,动态获取到Key值,然后获取Key对应的value,然后放入map中,最后放入list中。

3.若data只是JSONObject,而非数组,也可以将其看做List>,只是此list中只有一条数据罢了。

问题:怎么动态获取key值?

答:JSONObject 对象提供了keys()方法,此方法返回的是一个迭代器。解析到data时,创建list对象,每解析数组里面的一个元素,就创建map,之后加入list中。

Iterator iterator = joData.keys(); // joData是JSONObject对象

while(iterator.hasNext()){

String key = iterator.next() + "";

hashMap.put(key,joData.get(key));

}

arrayList.add(hashMap);

问题:怎么区分data是JSONObject  还是 JSONArray?

答:我想了个偏方,当data的value是数组时,即会以"["开头,所以用startWith("[")判断即可。若是,就将data的value转化为JSONArray,否则转化为JSONObject 。

问题:怎么获取值?

答:遍历list,根据已知key获取value;

小结:其实就连最外层的都可以看做List>的形式,此篇仅供参考,

  • 0
    点赞
  • 1
    收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:数字20 设计师:CSDN官方博客 返回首页
评论
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值