点击上方蓝字关注我
[ "obj1" : { "attr" : "xxx", "childs" : [ "obj2" : { "attr" : "xxx", "childs" : null }, "obj3" : { "attr" : "xxx", "childs" : null } ] }, "obj4" : { "attr" : "xxx" "childs" : null }]
当调用第三方接口, 返回树结构的json数据时, 可以用以下方式去解析
/** * JSONObject解析方法(可以解析任意层json,采用递归解析的方法) * 方法中的参数名称和个数, 根据实际需要自定义编辑, 比如可以自定义用逗号分隔的级联父id * @param objJson * @param menu 父菜单实体类 * @param list List
集合 * @return */@SuppressWarnings("rawtypes")public static List
analysisJson(Object objJson, Menu menu, List
list) { // 如果obj为json数组 if (objJson instanceof JSONArray) { //将接收到的对象转换为JSONArray数组 JSONArray objArray = (JSONArray) objJson; //对JSONArray数组进行循环遍历 for (int i = 0; i < objArray.size(); i++) { //新建menu对象 Menu menu1 = new Menu(); //设置menu属性 menu1.setParentIds(((JSONObject)objArray.get(i)).get("parentIds").toString()); menu1.setSort(Integer.parseInt(((JSONObject)objArray.get(i)).get("sort").toString())); menu1.setRemarks(((JSONObject)objArray.get(i)).get("remarks").toString()); menu1.setId(((JSONObject)objArray.get(i)).get("id").toString()); menu1.setPermission(((JSONObject)objArray.get(i)).get("perm").toString()); menu1.setHref(((JSONObject)objArray.get(i)).get("href").toString()); menu1.setName(((JSONObject)objArray.get(i)).get("name").toString()); menu1.setIsShow(((JSONObject)objArray.get(i)).get("isShow").toString()); //如果menu的ID为空,则说明父级菜单为顶级菜单,则设其ID为1 if("".equals(menu.getId())|| menu.getId() == null){ menu.setId("0"); } //设置menu对象的Parent的值为父级菜单对象 menu1.setParent(menu); //将该级菜单对象存进list集合中 list.add(menu1); //调用回调方法 analysisJson(objArray.get(i), menu1, list); } // 如果为json对象 }else if (objJson instanceof JSONObject) { //将Object对象转换为JSONObject对象 JSONObject jsonObject = (JSONObject) objJson; //迭代多有的Key值 Iterator it = jsonObject.keys(); //遍历每个Key值 while (it.hasNext()) { //将key值转换为字符串 String key = it.next().toString(); //根据key获取对象 Object object = jsonObject.get(key); // 如果得到的是数组 if (object instanceof JSONArray) { //将Object对象转换为JSONObject对象 JSONArray objArray = (JSONArray) object; //调用回调方法 analysisJson(objArray,menu,list); } // 如果key中是一个json对象 else if (object instanceof JSONObject) { //调用回调方法 analysisJson((JSONObject) object, menu, list); } } } return list;}