簡體   English   中英

在Java中將JSON數據結構遍歷為樹

[英]Traverse JSON data structure into tree in java

我需要從JSON構建一棵樹。 對於每個restProjectLevel:我具有一個id = level的restProjectLevels都將讀取JSON結構。 sequenceNr =根或子級。 對於每個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": []
        }
    ]
}

OK解決了! 不是最優雅的解決方案,但它可以工作...

    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);
            }
        }
    }
}

謝謝!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM