3

我有一棵树,它的节点如下:

-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 库,节点类是不可更改的

编辑:这种格式很奇怪,但需要。“属性”是节点,如果“属性”有孩子,它们不会放在属性中,以太在属性之后......我认为这不太合理,但我无法改变它

4

2 回答 2

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 开头

编辑:实际上这不会创建与您的问题相同的结构。但是我无法理解您问题中的结构。然而,与这个算法非常相似的东西会产生你想要的东西。原则是合理的。

于 2012-08-21T15:50:56.293 回答
0

您只需要解析您的route属性即可做出正确的图形表示。

于 2012-08-21T15:22:40.460 回答