2014-02-27 50 views
1

我有一個文件夾/文件系統的自定義類,其中文件夾可以有文件夾或文件的孩子。文件不能有孩子。當我添加文件夾和文件時,我想保存該結構以便能夠恢復它。現在我將結構存儲爲JSON字符串,而我的問題是如何將其解析回自定義類。將JSON解析爲自定義的「樹狀」文件結構

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能夠創建新的自定義對象並將它們存儲在我的文件結構中? 我試圖做到這一點,但我卡在第一級。我認爲我應該做的遞歸不是很好。 到目前爲止我的代碼,當有根你需要使用遞歸僅將文件/文件夾和子文件夾沒有/子文件

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

謝謝,這比預期的更簡單。必須改變我的當前文件夾,以便一切都不會被添加到根。 – jdahlgren