首先来看看数据库里的数据(这是一个菜单的数据,含多级):
要求从数据库里取出所有数据,并组合成以下格式:
组合的规则如下(JSON格式):
[{"ID":1,"PID":0,"TEXT":"首页","CHILDREN":[{"ID":2,"PID":1,"TEXT":"用户管理","CHILDREN":[{"ID":5,"PID":2,"TEXT":"用户列表"},{"ID":6,"PID":2,"TEXT":"添加用户"},{"ID":7,"PID":2,"TEXT":"修改密码"}]},{"ID":3,"PID":1,"TEXT":"资源管理","CHILDREN":[{"ID":8,"PID":3,"TEXT":"资源列表"},{"ID":9,"PID":3,"TEXT":"增加资源"}]},{"ID":4,"PID":1,"TEXT":"权限管理","CHILDREN":[{"ID":10,"PID":4,"TEXT":"权限列表"},{"ID":11,"PID":4,"TEXT":"增加权限"},{"ID":12,"PID":4,"TEXT":"删除权限"}]}]}]格式化后的JSON格式:[
{
"ID": 1,
"PID": 0,
"TEXT": "首页",
"CHILDREN": [
{
"ID": 2,
"PID": 1,
"TEXT": "用户管理",
"CHILDREN": [
{
"ID": 5,
"PID": 2,
"TEXT": "用户列表"
},
{
"ID": 6,
"PID": 2,
"TEXT": "添加用户"
},
{
"ID": 7,
"PID": 2,
"TEXT": "修改密码"
}
]
},
{
"ID": 3,
"PID": 1,
"TEXT": "资源管理",
"CHILDREN": [
{
"ID": 8,
"PID": 3,
"TEXT": "资源列表"
},
{
"ID": 9,
"PID": 3,
"TEXT": "增加资源"
}
]
},
{
"ID": 4,
"PID": 1,
"TEXT": "权限管理",
"CHILDREN": [
{
"ID": 10,
"PID": 4,
"TEXT": "权限列表"
},
{
"ID": 11,
"PID": 4,
"TEXT": "增加权限"
},
{
"ID": 12,
"PID": 4,
"TEXT": "删除权限"
}
]
}
]
}
]用JAVA语言写出其转换的程序?
要求从数据库里取出所有数据,并组合成以下格式:
组合的规则如下(JSON格式):
[{"ID":1,"PID":0,"TEXT":"首页","CHILDREN":[{"ID":2,"PID":1,"TEXT":"用户管理","CHILDREN":[{"ID":5,"PID":2,"TEXT":"用户列表"},{"ID":6,"PID":2,"TEXT":"添加用户"},{"ID":7,"PID":2,"TEXT":"修改密码"}]},{"ID":3,"PID":1,"TEXT":"资源管理","CHILDREN":[{"ID":8,"PID":3,"TEXT":"资源列表"},{"ID":9,"PID":3,"TEXT":"增加资源"}]},{"ID":4,"PID":1,"TEXT":"权限管理","CHILDREN":[{"ID":10,"PID":4,"TEXT":"权限列表"},{"ID":11,"PID":4,"TEXT":"增加权限"},{"ID":12,"PID":4,"TEXT":"删除权限"}]}]}]格式化后的JSON格式:[
{
"ID": 1,
"PID": 0,
"TEXT": "首页",
"CHILDREN": [
{
"ID": 2,
"PID": 1,
"TEXT": "用户管理",
"CHILDREN": [
{
"ID": 5,
"PID": 2,
"TEXT": "用户列表"
},
{
"ID": 6,
"PID": 2,
"TEXT": "添加用户"
},
{
"ID": 7,
"PID": 2,
"TEXT": "修改密码"
}
]
},
{
"ID": 3,
"PID": 1,
"TEXT": "资源管理",
"CHILDREN": [
{
"ID": 8,
"PID": 3,
"TEXT": "资源列表"
},
{
"ID": 9,
"PID": 3,
"TEXT": "增加资源"
}
]
},
{
"ID": 4,
"PID": 1,
"TEXT": "权限管理",
"CHILDREN": [
{
"ID": 10,
"PID": 4,
"TEXT": "权限列表"
},
{
"ID": 11,
"PID": 4,
"TEXT": "增加权限"
},
{
"ID": 12,
"PID": 4,
"TEXT": "删除权限"
}
]
}
]
}
]用JAVA语言写出其转换的程序?
解决方案 »
- 菜鸟关于一个数组的问题。谢谢
- 菜鸟,求书中的一段话的意思!
- 关于数组的问题
- 请教关于含有数据库的Java程序打包问题
- <form action="Updateuser.do?id=<%=id%>" id="update" name="update" method="post"
- 你做开发的时候最喜欢听的音乐
- applet和servlt通信问题(到现在没解决,那位高手可以挺身而出)
- 问一个在jComboBox控件中包含Vector变量的问题!
- 关于rtf的问题
- 一段程序,不知道为什么给的值是5,2个输出的值都是15,迷茫!请帮忙解释下数据流程
- 有一问题?
- 急!!怎么用JAVA把彩票11选5的所有组合打印出来??
从数据库取出来的字符串如下:{ID:1,PID:0,TEXT:"首页"},{ID:2,PID:1,TEXT:"用户管理"},{ID:3,PID:1,TEXT:"资源管理"},{ID:4,PID:1,TEXT:"权限管理"},{ID:5,PID:2,TEXT:"用户列表"},{ID:6,PID:2,TEXT:"添加用户"},{ID:7,PID:2,TEXT:"修改密码"},{ID:8,PID:3,TEXT:"资源列表"},{ID:9,PID:3,TEXT:"增加资源"},{ID:10,PID:4,TEXT:"权限列表"},{ID:11,PID:4,TEXT:"增加权限"},{ID:12,PID:4,TEXT:"删除权限"}
package com.djk.design.compent;import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;public class MyTest
{
public static void main(String[] args)
{
//存放PID
Set<String> pidSet =new HashSet<String>();
//这里我们自己直接加入按道理应该是从数据库中读取
pidSet.add("1");
pidSet.add("2");
pidSet.add("3");
pidSet.add("4");
//这边也模拟从数据哭中读取
List<MyCompentMenu> list = new ArrayList<MyCompentMenu>();
MyCompentMenu shouye = new MyMenu("1",null,"首页");
MyCompentMenu userManager = new MyMenu("2","1","用户管理");
MyCompentMenu resourceManager =new MyMenu("3","1","资源管理");
MyCompentMenu roleManager = new MyMenu("4","1","权限管理");
MyCompentMenu user = new MyMenu("5","2","用户列表");
MyCompentMenu addUser = new MyMenu("6","2","添加用户");
MyCompentMenu modifyUser = new MyMenu("7","2","修改用户");
MyCompentMenu resource = new MyMenu("8","3","资源列表");
MyCompentMenu addResource = new MyMenu("9","3","增加资源");
MyCompentMenu role = new MyMenu("10","4","权限列表");
MyCompentMenu addRole = new MyMenu("11","4","增加权限");
MyCompentMenu deleteRole = new MyMenu("12","4","删除权限");
list.add(shouye);
list.add(userManager);
list.add(resourceManager);
list.add(roleManager);
list.add(user);
list.add(addUser);
list.add(modifyUser);
list.add(resource);
list.add(addResource);
list.add(role);
list.add(addRole);
list.add(deleteRole);
Map<String,MyCompentMenu> map = new HashMap<String, MyCompentMenu>();
for(MyCompentMenu menu :list)
{
MyMenu m =(MyMenu) menu;
//如果为空则说明是最高的节点
if(null==m.getpId())
{
map.put(m.getId(), m);
}else
{
//如果父节点不为空则加到父节点下面
if(null != map.get(m.getpId()))
{
//如果加入成功则说明他是叶子节点,不然就是子节点
if(pidSet.add(m.getId()))
{
map.get(m.getpId()).add(new MyMenuItem(m.getId(),m.getpId(),m.getText()));
map.put(m.getId(), new MyMenuItem(m.getId(),m.getpId(),m.getText()));
}else
{
map.get(m.getpId()).add(m);
map.put(m.getId(), m);
}
}
}
}
map.get("1").print();
}
}/**
* 组件菜单
* @author djk
*
*/
abstract class MyCompentMenu
{
//增加组件
abstract void add(MyCompentMenu compentMenu);
//减少组件
abstract void remove(MyCompentMenu compentMenu);
//打印方法
abstract void print();
}/**
* 叶子节点
* @author djk
*
*/
class MyMenuItem extends MyCompentMenu
{
//编号
private String id;
//父节点编号
private String pId;
//内容
private String text;
public MyMenuItem(String id,String pId,String text)
{
this.id = id;
this.pId = pId;
this.text = text;
}
@Override
void add(MyCompentMenu compentMenu) {
} @Override
void print() {
System.out.println("叶子节点:内容是:"+text+","+"id:"+this.id+","+"pid:"+this.pId);
} @Override
void remove(MyCompentMenu compentMenu) {
}
}/**
* 子节点
* @author djk
*
*/
class MyMenu extends MyCompentMenu
{
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getpId() {
return pId;
}
public void setpId(String pId) {
this.pId = pId;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
} //编号
private String id;
//父节点编号
private String pId;
//内容
private String text;
public List<MyCompentMenu> getList() {
return list;
}
public void setList(List<MyCompentMenu> list) {
this.list = list;
} private List<MyCompentMenu> list=null;
public MyMenu(String id,String pId,String text)
{
this.id = id;
this.pId = pId;
this.text = text;
list = new ArrayList<MyCompentMenu>();
}
@Override
void add(MyCompentMenu compentMenu) {
list.add(compentMenu);
} @Override
void print() { System.out.println("我是菜单,我的名字是:"+this.text+","+"id:"+this.id+","+"pid:"+this.pId);
Iterator<MyCompentMenu> iterator =list.iterator();
while(iterator.hasNext())
{
MyCompentMenu menu = iterator.next();
menu.print();
}
} @Override
void remove(MyCompentMenu compentMenu) {
}
}运行结果:
我是菜单,我的名字是:首页,id:1,pid:null
我是菜单,我的名字是:用户管理,id:2,pid:1
叶子节点:内容是:用户列表,id:5,pid:2
叶子节点:内容是:添加用户,id:6,pid:2
叶子节点:内容是:修改用户,id:7,pid:2
我是菜单,我的名字是:资源管理,id:3,pid:1
叶子节点:内容是:资源列表,id:8,pid:3
叶子节点:内容是:增加资源,id:9,pid:3
我是菜单,我的名字是:权限管理,id:4,pid:1
叶子节点:内容是:权限列表,id:10,pid:4
叶子节点:内容是:增加权限,id:11,pid:4
叶子节点:内容是:删除权限,id:12,pid:4