// 用来放json
List<JSONObject> l = new ArrayList<>();
// 得到数据库中的数据
List<TreeNode> menuTreeList = md.menuTreeList(req.getParameterMap(), null);
for (TreeNode treeNode : menuTreeList) {
// 创建json对象,用来得到想要的json格式
JSONObject obj = new JSONObject();
// 这是树形菜单要的json格式(树形菜单读取的数据是json格式)
obj.put("name", treeNode.getname());
obj.put("asdasd", treeNode.getname());
obj.put("id", treeNode.getId());
// obj.put("children", treeNode.getChildren());
// 用来存放相应的父菜单下的子菜单
List<JSONObject> r = new ArrayList<>();
// 遍历相应的子菜单集合
for (TreeNode rr : treeNode.getChildren()) {
// 这是树形菜单需要的子菜单的格式(属性chirdren的设置)
JSONObject o = new JSONObject();
o.put("id", rr.getId());
o.put("name", rr.getname());
o.put("children", rr.getAttributes());
o.put("href", rr.getAttributes().get("href"));
// obj.put("pid", rr.getPid());
// 下一层子菜单
List<JSONObject> s1 = new ArrayList<>();
for (TreeNode s2 : rr.getChildren()) {//如果有多层的话继续使用循环嵌套
JSONObject o1 = new JSONObject();
o1.put("id", s2.getId());
o1.put("name", s2.getname());
o1.put("children", s2.getAttributes());
o1.put("href", s2.getAttributes().get("href"));
// System.out.println(s2.getname());
s1.add(o1);
} // 将子菜单的集合放到chirden属性里面
o.put("children", s1);
r.add(o);
// 将子菜单的集合放到chirden属性里面
obj.put("children", r);
// System.out.println(obj);
}
l.add(obj);
}

String outstr = JSON.toJSONString(l);
super.print(outstr, resp);//将json字符输出到前台的方法

上面的是按照结构顺序一层一层的拼上去,下面这个是递归实现

public List<JSONObject> jsonObjects(List<TreeNode> resp) {
JSONObject jsonObject = new JSONObject();
List<JSONObject> l1 = new ArrayList<>();
for (TreeNode treeNode : resp) {
jsonObject = new JSONObject();
jsonObject.put("id", treeNode.getId());
jsonObject.put("name", treeNode.getname());
jsonObject.put("href", treeNode.getAttributes().get("href"));
if (treeNode.getChildren() != null && treeNode.getChildren().size() > 0) {
List<JSONObject> lss = jsonObjects(treeNode.getChildren());
jsonObject.put("children", lss);
}
l1.add(jsonObject);
}
return l1;
}