我有一个像这样的节点的树:
-Root
|-Node 1
|-Node 2
|-Node 2.1
其中一个节点由一个类
代表class Node {
Integer id;
String name;
String route;
}
显示节点的实例保存为
{id: 1, name: "Root", route:"1"}
{id: 2, name: "Node 1", route: "1/2"}
{id: 3, name: "Node 2", route: "1/3"}
{id: 4, name: "Node 2.1", route: "1/3/4"}
问题是:如何从节点列表到表示树状态的json,例如:
[{
"property": {
"name": "Root",
"id": "1",
"route": "1"
},
"children": [{
"property": {
"name": "Node 1",
"id": "2",
"route": "1/2"
},
"property": {
"name": "Node 2",
"id": "3",
"route": "1/3"
},
"children": [{
"property": {
"name": "Node 3",
"id": "4",
"route": "1/3/4"
}
}]
}]
}]
我需要这个json结构
所有这些都必须在java中完成。我试图遍历我的节点列表并构建json对象,但我有问题从节点的路由字段获取json结构
我能够使用json库,节点类是不可更改的
编辑:这种格式很奇怪,但需要。 “属性”是节点,如果“属性”有孩子,他们就不会被放置在属性中,以后属性......我认为这不是很有意义但我无法改变它
答案 0 :(得分:4)
您可以尝试这样的算法:
public JSONObject toJSON(Node node, List<Node> others) {
JSONObject json = new JSONObject();
json.put("id", node.id); // and so on
...
List children = new ArrayList<JSONObject>();
for(Node subnode : others) {
if(isChildOf(subnode, node)) {
others.remove(subnode);
children.add(toJSON(subnode, others));
}
}
json.put("children", children);
return json;
}
您在迭代时修改列表,并且递归调用也会迭代它。这可能是毛茸茸的,但试试吧。如果失败,可以采取各种方法。
isChildOf()
是缺失的部分。这是一些相当基本的字符串操作,以查看subnode.path是否以node.id
编辑:实际上这不会创建与您的问题相同的结构。但是我无法理解你问题中的结构。然而,与此算法非常相似的东西将产生您想要的效果。原则是合理的。
答案 1 :(得分:0)
您只需要解析route
属性,以便制作正确的图表。