Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将JSON解析为自定义';树状';文件结构_Javascript_Json - Fatal编程技术网

Javascript 将JSON解析为自定义';树状';文件结构

Javascript 将JSON解析为自定义';树状';文件结构,javascript,json,Javascript,Json,我有一个自定义类的文件夹/文件系统,其中文件夹可以包含文件夹或文件的子项。文件不能有子文件。当我添加了文件夹和文件后,我希望保存结构以便能够恢复它。现在,我将该结构存储为JSON字符串,我的问题是如何将其解析回自定义类 JSON字符串可能如下所示: { "name": "Root", "type": "Folder", "img": null, "checked": false, "children": [ { "name": "Folder1",

我有一个自定义类的文件夹/文件系统,其中文件夹可以包含文件夹或文件的子项。文件不能有子文件。当我添加了文件夹和文件后,我希望保存结构以便能够恢复它。现在,我将该结构存储为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!='文件夹“
是我的自定义文件类的对象

我应该如何解析这个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');
        }               
    }
}
函数importJson(json){ var jsonObj=JSON.parse(JSON); //当/如果递归时,这一行需要修复? var currentFolder=rootFolder;//一个全局变量,它是我的rootFolder for(var i=0,obj=jsonObj.children;i您需要使用递归。让您的方法接受解析后的JSON作为参数,而不是在函数中解析它,然后当您需要检查文件夹中的子项时,只需使用您要解析的文件夹再次调用您的方法,在本例中,
obj[i]

谢谢,这比预期的要简单。必须更改我的currentFolder,以便所有内容都不会添加到根目录中。