[英]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.