将JSON解析为自定义的“树状”文件结构

时间:2014-02-27 15:09:09

标签: javascript 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 个答案:

答案 0 :(得分:1)

您需要使用递归。让您的方法接受解析后的JSON作为参数而不是在函数中解析它,然后当您需要检查文件夹中的子项时,只需再次使用您要解析的文件夹调用您的方法,在这种情况下{{1} }。