我有一个自定义类的文件夹/文件系统,其中文件夹可以包含文件夹或文件的子项。文件不能有孩子。当我添加文件夹和文件时,我想保存结构以便能够恢复它。现在我将结构存储为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');
}
}
}
答案 0 :(得分:1)
您需要使用递归。让您的方法接受解析后的JSON作为参数而不是在函数中解析它,然后当您需要检查文件夹中的子项时,只需再次使用您要解析的文件夹调用您的方法,在这种情况下{{1} }。