Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中将JSON数据结构遍历到树中_Java_Json - Fatal编程技术网

在java中将JSON数据结构遍历到树中

在java中将JSON数据结构遍历到树中,java,json,Java,Json,我需要从JSON构建一个树。JSON结构读取,对于每个restProjectLevel:restProjectLevel,我有一个id=level的值。sequenceNr=根或子对象。对于每个restProject:restProjects,我都有一个id=projectId和一个projectdhook=附加的projectId 我认为JSON数据将最好地解释它 { "id": 3, "description": "New Project Plan", "restPr

我需要从JSON构建一个树。JSON结构读取,对于每个restProjectLevel:restProjectLevel,我有一个id=level的值。sequenceNr=根或子对象。对于每个restProject:restProjects,我都有一个id=projectId和一个projectdhook=附加的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);
            }
        }
    }
}
for(restprojectlevelprojectlevel:projectLevelList){
if(projectLevel.getSequenceNr()==0){
for(RestProject项目:projectLevel.getRestProjects()){
restParentNode=新的restParentNode();
遍历(sortedRestProjects、project、restParentNode);
添加(restParentNode);
}
}
}
私有void遍历(列表restProjects、RESTProjectProject、RestParentNode、RestParentNode){
for(RestProject RestProject:restProjects){
if(project.getId()==restProject.getprojectdhook()| | project.getId()==restProject.getId()){
字符串projectName=restProject.getProjectName();
if(hasNode(projectName)){
持续
}否则{
RestNode RestNode=new RestNode();
restNode.nodes.add(restProject);
restParentNode.nodes.add(restNode);
遍历(restProjects、restProjects、restParentNode);
}
}
}
}

谢谢

使用像Jackson这样的JSON映射库,它会自动从JSON中创建POJO。我需要一些帮助来编写代码。问候。#fge我有POJO的#fge抱歉,如果使用JSON映射库,这也会输入数据吗?如果您自己解决了问题,请将解决方案放入答案中,并将答案标记为已接受。(回答你自己的问题没关系。)不要把答案放在问题区域,并在标题中写上“已解决”。