2014-02-27 1 views
1

폴더가 폴더 또는 파일의 하위 항목을 가질 수있는 사용자 지정 클래스의 폴더/파일 시스템이 있습니다. 파일은 하위 항목을 가질 수 없습니다. 폴더와 파일을 추가하면 복원 할 수 있도록 구조를 저장하고 싶습니다. 지금 JSON 문자열로 구조를 저장하고 내 문제는 사용자 지정 클래스로 다시 구문 분석하는 방법입니다.사용자 지정 'tree-like'파일 구조로 JSON 구문 분석

{ 
    "name": "Root", 
    "type": "Folder", 
    "img": null, 
    "checked": false, 
    "children": [ 
    { 
     "name": "Folder1", 
     "type": "Folder", 
     "img": "img/folder.png", 
     "checked": false, 
     "children": [ 

     ] 
    }, 
    { 
     "name": "Desert.jpg", 
     "type": "image/jpeg", 
     "img": "img/file.png", 
     "checked": false, 
     "data": { 
     "lastModifiedDate": "2009-07-14T05:32:31.000Z", 
     "size": 845941 
     } 
    } 
    ] 
} 
type ==='Folder'와 아이들이 내 사용자 지정 폴더 클래스입니다

type !== 'Folder' 내 사용자 정의 파일 클래스의 객체는 다음과 같은

JSON 문자열을 볼 수 있었다.

이 JSON을 구문 분석하여 새 사용자 지정 개체를 만들어 내 파일 구조에 저장할 수 있어야합니까? 이 작업을 시도했지만 첫 번째 수준에서 멈추었습니다. 나는 내가해야한다고 생각하는 재귀를 잘하지 못한다. 당신은 재귀를 사용할 필요가 루트에서만 파일/폴더없이 하위 폴더/서브 파일

function importJson(json){ 
    var jsonObj = JSON.parse(json); 
    //This line needs to be fixed when/if recursion? 
    var currentFolder = rootFolder; //a global variable which is my rootFolder 

    for(var i = 0, obj = jsonObj.children; i < obj.length; i++){ 
     if(obj[i].type === 'Folder'){ 
      var folder = new Folder(obj[i].name, 'Folder'); 
      folder.img = obj[i].img; 
      currentFolder.add(folder); 
      console.log('A folder, check for children?'); 
     } 
     else{ 
      var file = new File(obj[i].name, obj[i].type); 
      file.data = obj[i].data; 
      file.img = obj[i].img; 
      currentFolder.add(file); 
      console.log('a file'); 
     }    
    } 
} 

답변

1

있을 때 내 코드는 지금까지 작품을. 메서드에서 파싱 된 JSON을 함수에서 파싱하는 대신 매개 변수로 받아 들인 다음 폴더에서 자식을 확인해야하는 경우 구문 분석 할 폴더 (이 경우 obj[i])로 메서드를 다시 호출하면됩니다.

+0

감사합니다. 예상보다 간단했습니다. 모든 것을 루트에 추가하지 않도록 currentFolder를 변경해야했습니다. – jdahlgren