/** * 对jsonObject对象进行key的获取 * @param jsonObject */ public ArrayList<String> jsonKeyRecursion(JSONObject jsonObject,ArrayList urlArr){ //创建urlArr用来存放url路径values JSONObject littleJson = null; //对jsonObject中的url(key)的value进行更替, 加入授权请求连接 // String key = null; for(String key : jsonObject.keySet()){ System.out.println("key : "+key); //返回新的button下的json串 littleJson = (JSONObject) jsonObject.get(key); System.out.println("littleJson : "+littleJson); if(key.equals("url")){ urlArr.add(littleJson); System.out.println("add one littleJson to array : "+littleJson); } } boolean url = littleJson.containsKey(""); System.out.println("url:"+url); //这里的littleJson是JSONArray了,所以传入失败 jsonKeyRecursion(littleJson,urlArr); // Set<String> strings = littleJson.keySet(); //// littleJson // System.out.println("strings:"+strings); // 1. button // Set<Map.Entry<String, Object>> entries = littleJson.entrySet(); // Object[] objects = entries.toArray(); // System.out.println(objects); // System.out.println("entries:"+entries); // 1. [button=[{"name":"今日歌曲","sub_button":[],"type":"click","key ... // Iterator<Map.Entry<String, Object>> iterator = entries.iterator(); // if(iterator.hasNext()){ // System.out.println("iterator.next():"+iterator.next()); // } return urlArr; }
并没有获取复杂的嵌套json数据的很好的方法么
待解析
当第一次传入的jsonObject进行了get(key)之后,输出littleJson是去掉微信自定义菜单第一个key值(menu)后的button开头的json集合
但当要 get(button) 获取所剩下的button的集合时,程序提示出错为 JSONArray can't cast type to JSONObject .
使用强制转换失败,所以需要新的方法,让其(JSONArray)进入再一次迭代遍历中获取key的value,获取key的value直到把他们都装入键值对的map中.
{"menu":{"button":[{"type":"click","name":"今日歌曲","key":"V1001_TODAY_MUSIC","sub_button":[]},{"type":"click","name":"歌手简介","key":"V1001_TODAY_SINGER","sub_button":[]},{"name":"菜单","sub_button":[{"type":"view","name":"搜索","url":"http://www.ykmimi.com/","sub_button":[]},{"type":"view","name":"视频","url":"http://www.ykmimi.com/","sub_button":[]},{"type":"click","name":"赞一下我们","key":"V1001_GOOD","sub_button":[]}]}]}}
例如之上的这条json字符串.