java - java中将JSON数据结构遍历成树

标签 java json

我需要从 JSON 构建一棵树。 JSON 结构读取,对于每个 restProjectLevel :restProjectLevels 我有一个 id = 级别。序列号 = 根或子。对于每个restProject:restProjects,我都有一个 id = projectId 和一个projectIdHook = 附加的projectId。

我认为 JSON 数据可以最好地解释它。

{
    "id": 3,
    "description": "New Project Plan",
    "restProjectLevels": [
        {
            "id": 19,
            "sequenceNr": 0,
            "restProjects": [
                {
                    "id": 28,
                    "projectName": "Project A",
                    "description": "",
                    "projectLevelId": 19,
                    "projectIdHook": 0,
                    "restProjectProcesses": []
                },
                {
                    "id": 29,
                    "projectName": "Project B",
                    "description": "",
                    "projectLevelId": 19,
                    "projectIdHook": 0,
                    "restProjectProcesses": []
                },
                {
                    "id": 30,
                    "projectName": "Project C",
                    "description": "",
                    "projectLevelId": 19,
                    "projectIdHook": 0,
                    "restProjectProcesses": []
                },
                {
                    "id": 41,
                    "projectName": "New",
                    "description": "",
                    "projectLevelId": 19,
                    "projectIdHook": 0,
                    "restProjectProcesses": []
                }
            ]
        },
        {
            "id": 20,
            "sequenceNr": 1,
            "restProjects": [
                {
                    "id": 31,
                    "projectName": "Project A.1",
                    "description": "",
                    "projectLevelId": 20,
                    "projectIdHook": 28,
                    "restProjectProcesses": []
                },
                {
                    "id": 33,
                    "projectName": "Project B.1",
                    "description": "",
                    "projectLevelId": 20,
                    "projectIdHook": 29,
                    "restProjectProcesses": []
                },
                {
                    "id": 35,
                    "projectName": "Project C.1",
                    "description": "",
                    "projectLevelId": 20,
                    "projectIdHook": 30,
                    "restProjectProcesses": []
                }
            ]
        },
        {
            "id": 21,
            "sequenceNr": 2,
            "restProjects": [
                {
                    "id": 32,
                    "projectName": "Project A.2",
                    "description": "",
                    "projectLevelId": 21,
                    "projectIdHook": 31,
                    "restProjectProcesses": []
                },
                {
                    "id": 36,
                    "projectName": "Project C.2",
                    "description": "",
                    "projectLevelId": 21,
                    "projectIdHook": 35,
                    "restProjectProcesses": []
                }
            ]
        },
        {
            "id": 22,
            "sequenceNr": 3,
            "restProjects": [
                {
                    "id": 34,
                    "projectName": "Projet B.4",
                    "description": "",
                    "projectLevelId": 22,
                    "projectIdHook": 33,
                    "restProjectProcesses": []
                },
                {
                    "id": 37,
                    "projectName": "Project C.3",
                    "description": "",
                    "projectLevelId": 22,
                    "projectIdHook": 36,
                    "restProjectProcesses": []
                }
            ]
        },
        {
            "id": 23,
            "sequenceNr": 4,
            "restProjects": []
        }
    ]
}

最佳答案

好的解决了这个问题!不是最优雅的解决方案,但它有效......

    for(RestProjectLevel projectLevel: projectLevelList) {
        if(projectLevel.getSequenceNr() == 0) {
            for(RestProject project : projectLevel.getRestProjects()) {
                restParentNode = new RestParentNode();
                traverse(sortedRestProjects, project, restParentNode);
                restTree.nodes.add(restParentNode);
            }
        }
    }

private void traverse(List<RestProject> restProjects, RestProject project, RestParentNode restParentNode) {
    for (RestProject restProject : restProjects) {
        if(project.getId() == restProject.getProjectIdHook() || project.getId() == restProject.getId()) {

            String projectName = restProject.getProjectName();

            if(hasNode(projectName)) {
                continue;
            } else {
                RestNode restNode = new RestNode();
                restNode.nodes.add(restProject);
                restParentNode.nodes.add(restNode);
                traverse(restProjects, restProject, restParentNode);
            }
        }
    }
}

谢谢!

关于java - java中将JSON数据结构遍历成树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22195063/

相关文章:

Python Json小写nan

javascript - 如何使用 '+' 连接 JSON 数据中的字符串?

json - JSON.registerObjectMarshaller在 Bootstrap 中不起作用

java - 我可以为抽象类创建一个 DataOutputStream 方法并将其用于子类吗?

java - 这两种初始化模式有区别吗?

json - 如何在 App Engine 中将 json 字符串反序列化为 Java 对象

javascript - 快速表单解析不起作用

java - 在 Android void 中向公众传递字符串

java - 分割操作栏底部颜色

java - 是否可以使用 CommConnection 下载和上传记录库和图像?