java - 如何将树路径转换为 ​​json 对象

标签 java json tree

我有一棵树,节点是这样的:

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

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

最佳答案

您可以尝试这样的算法:

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

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

关于java - 如何将树路径转换为 ​​json 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12057961/

相关文章:

java - 错误 : constraint for relation already exists with hibernate 4. 3.1

java - 选择没有子字符串的行

java - 如何克隆TestNG的TestResult

javascript - 根据另一个 JSON 对象的值访问 JSON 对象

c - 释放为树分配的内存 - C

java - Junit 外部资源@Rule 命令

python - 将列表表示为带有双引号的字符串,而不是 JSON 的单引号

json - 如何使用外部 Json 文件作为 webapi 的数据源

java - InOrder 遍历进入无限循环并仅打印第一个节点

c - C中的二叉树插入排序