gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:21:17 27 4
gpt4 key购买 nike

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

-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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com