在java中将JSON数据结构遍历到树中
我需要从JSON构建一个树。JSON结构读取,对于每个restProjectLevel:restProjectLevel,我有一个id=level的值。sequenceNr=根或子对象。对于每个restProject:restProjects,我都有一个id=projectId和一个projectdhook=附加的projectId 我认为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
{
"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映射库,这也会输入数据吗?如果您自己解决了问题,请将解决方案放入答案中,并将答案标记为已接受。(回答你自己的问题没关系。)不要把答案放在问题区域,并在标题中写上“已解决”。