JSON

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

字号+ 作者:H5之家 来源:H5之家 2017-05-17 10:02 我要评论( )

此篇讲解保存json数据的小技巧。使用JSONObject和JSONArray解析实例:{code:1,name:kongge,age:22,date:[{userId:123,userPwd:456},{userId:321,userPwd:789}]}

此篇讲解保存json数据的小技巧。

推荐:fastjson或gson的使用。


使用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<Map<String, Object>>,动态获取到Key值,然后获取Key对应的value,然后放入map中,最后放入list中。

3.若data只是JSONObject,而非数组,也可以将其看做List<Map<String, Object>>,只是此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<Map<String, Object>>的形式,此篇仅供参考,

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • SpringMVC教程之json交互使用

    SpringMVC教程之json交互使用

    2017-05-17 13:02

  • 关于springMVC处理json数据教程

    关于springMVC处理json数据教程

    2017-05-16 17:08

  • JSON教程、使用手册

    JSON教程、使用手册

    2017-05-16 17:04

  • Swift JSON教程:使用JSON

    Swift JSON教程:使用JSON

    2017-05-15 18:00

网友点评