2014-03-05 45 views
1

我需要從JSON構建樹。 JSON結構讀取,爲每個restProjectLevel:restProjectLevels我有一個id =級開啓。 sequenceNr =根或子。對於每個restProject:restProjects我有一個id = projectId和一個projectIdHook =附加的projectId。將JSON數據結構遍歷到java中的樹中

我認爲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": [] 
     } 
    ] 
} 
+0

使用JSON映射庫(如Jackson),它會自動從您的JSON中創建一個POJO。 – fge

+0

我需要一些幫助來編寫代碼。親切的問候。 – user3382956

+0

#fge我有POJO的 – user3382956

回答

0

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

謝謝!