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

[fastjson] - fastjson中 JSONObject 和 JSONArray的更多相关文章

  1. fastjson如何判断JSONObject和JSONArray

    1.fastjson如何判断JSONObject和JSONArray,百度一下,教程还真不少,但是是阿里的fastjson的我是没有找到合适的方法.这里用一个还算可以的方法,算是实现了这个效果. 网上 ...

  2. [转]java中JSONObject与JSONArray的使用详细说明及有关JSON的工具类

    JSONObject与JSONArray的使用 一.JAR包简介 要使程序可以运行必须引入JSON-lib包,JSON-lib包同时依赖于以下的JAR包: 1.commons-lang.jar 2.c ...

  3. java中JSONObject与JSONArray的使用

    JSONObject与JSONArray 最近在学习过程中用到了稍微复杂点的json数据需要将json数据解析出来,这里就截取一部分作为例子 1.JSONObject介绍 JSONObject-lib ...

  4. JavaScript中JSONObject和JSONArray相关知识备忘(网络转载)

    1.json的格式,有两种: {"key": "value"} //JSONObject(对象) [{"key1": "value ...

  5. FastJson中JSONObject用法及常用方法总结

    本文为博主原创,未经允许不得转载: 最近一直有用到解析各种数据,主要是用FastJson进行数据解析,其中一个重要的类为JSONObject,今天有时间,所以进行总结一下: JSONobject是Fa ...

  6. Fastjson, Gson, org.json.JSON三者对于JSONObject及JSONArray的判断

    1.Fastjson 我们通常在已知格式的情况下直接使用JSONObject,JSONArray,但是如果遇到需要判断格式呢? try{ Object object = JSON.parse(a); ...

  7. fastjson之JSONObject、JSONArray

    JSONObject,JSONArray是JSON的两个子类. 首先我们来看JSONObject源码: 会发现JSONObject是继承Map<String, Object>,并且都是使用 ...

  8. java和js中JSONObject,JSONArray,Map,String之间转换

    --------------------------------------------------Java中--------------------------------------------- ...

  9. 嵌套的JsonObject与JSONArray的取值---JSON中嵌套JSONArray

    在复杂的JSON数据的格式中,往往会对JSON数据进行嵌套,这样取值会比之前的取值稍微复杂一点,但是只要思路清晰,其实取法还是一样的.就跟if else语句一样,如果if中套if,if中再套if,写的 ...

随机推荐

  1. axios请求本地json

    在vux的项目中 1,首先,json文件的位置: 原因: 访问服务器文件,应该把 json文件放在最外层的static文件夹,这个文件夹是vue-cli内置服务器向外暴露的静态文件夹   2,一定要用 ...

  2. JSP自定义标签开发入门《转》

    JSP自定义标签开发入门 一般情况下开发jsp自定义标签需要引用以下两个包 import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*; ...

  3. Navicat 创建 Mysql 函数

    1.点击新建函数 2.写函数,保存为v1 3.调用 SELECT id,v1(id) from 表

  4. log file sync 事件(转)

    log file sync   log file sync等待时间发生在redo log从log buffer写入到log file期间. 下面对log file sync做个详细的解释.   何时发 ...

  5. 160226、js常用的验证

    /*** 特殊符号 */ function specialCharacter(carNo){ var st=/^[^/@#$%^&*()—''_()!¥~·..,-<><&g ...

  6. poj2376 Cleaning Shifts【线段树】【DP】

    Cleaning Shifts Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 32561   Accepted: 7972 ...

  7. Codeforces Round #434 (Div. 2, based on Technocup 2018 Elimination Round 1)

    A. k-rounding 题目意思:给两个数n和m,现在让你输出一个数ans,ans是n倍数且末尾要有m个0; 题目思路:我们知道一个数末尾0的个数和其质因数中2的数量和5的数量的最小值有关系,所以 ...

  8. 设计模式之——Observer模式

    Observer模式又叫做观察者模式,当观察对象状态发生变化的时候,就会通知给观察者.这种模式适用于根据对象状态进行响应的场景! 实例程序是一个输出数字的程序. 观察者Observer类用于每500m ...

  9. B. Factory Repairs---cf627B(线段树)

    题目链接:http://codeforces.com/problemset/problem/627/B 题意:有一个工厂生产零件,但是机器是不正常的,需要维修,维修时间是 k 天,在维修期间不能生产, ...

  10. COURSES---poj1469 hdu1083(最大匹配)

    题目链接:http://poj.org/problem?id=1469   http://acm.hdu.edu.cn/showproblem.php?pid=1083 题意:有n个学生p门课, 每门 ...