/** * @param parentName 父级编号对应的字段名 * @param idName 主键的字段名称 * @param list 数据库查询出来的数据 * */ public static JSONArray createTreeJson(List<?> list,String parentName,String idName) throws Exception { JSONArray rootArray = new JSONArray(); for (int i = 0; i < list.size(); i++) { Class resource = list.get(i).getClass(); Object objectResource = list.get(i); // 解除私有化限制 for (Field field : resource.getDeclaredFields()) { if (field.getName().equals(parentName)) { field.setAccessible(true); String parentIdField = field.get(objectResource).toString(); if (parentIdField.equals("0")) { //创建子节点分支 JSONObject rootObj = createBranch(list, objectResource,parentName,idName); rootArray.add(rootObj); } } } } return rootArray; } public static JSONObject createBranch(List<?> list, Object currentNode,String parentName,String idName) throws Exception { JSONObject currentObj = (JSONObject) JSONObject.toJSON(currentNode); JSONArray childArray = new JSONArray(); String parentIdField = null; String idField = null; for (int i = 0; i < list.size(); i++) { Class newNode = list.get(i).getClass(); Class currentNodeClass = currentNode.getClass(); for (Field field : newNode.getDeclaredFields()){ if (field.getName().equals(parentName)) { field.setAccessible(true); // 反射获取值 parentIdField = field.get(list.get(i)).toString(); } } for (Field field : currentNodeClass.getDeclaredFields()) { if (field.getName().equals(idName)) { field.setAccessible(true); // 反射获取值 idField = field.get(currentNode).toString(); } } if (parentIdField != null && idField != null && parentIdField.equals(idField)) { JSONObject childObj = createBranch(list, list.get(i),parentName,idName); childArray.add(childObj); } } if (!childArray.isEmpty()) { currentObj.put("children", childArray); } return currentObj; }