/** * 對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字符串.