javascript - JSON 字符串转 JS 数组

标签 javascript arrays json multidimensional-array nested

如何将文件夹结构 JSON 字符串转换为 JS 数组。我有以下 JSON 字符串

   [{ "Name": "A", "ParentName": "Config", "Type": "default" },
{ "Name": "SubA", "ParentName": "A", "Type": "default" },
{ "Name": "SubAFile", "ParentName": "SubA", "Type": "file" },
{ "Name": "B", "ParentName": "Config", "Type": "default" },
{ "Name": "C", "ParentName": "Config", "Type": "default" }]

我想用以下格式制作 JS Array 对象

   var NewStr = [{
       "name": 'A',
       "id": 'A',
       "icon": 'fa fa-folder',
       "items": [{
           "title": "A",
           "icon": "fa fa-folder",
           "id": "A",
           "items": [{
               "name": "subA",
               "icon": "fa fa-folder",
               "id": "subA",
               "items": [{
                   "title": "SubA",
                   "icon": "fa fa-folder",
                   "id": "SubA",
                   "items": [{
                       "name": "SubAFile",
                       "icon": "fa fa-file"
                   }]
               }]
           }]
       }]
   }, {
       "name": 'B',
       "id": 'b',
       "icon": "fa fa-folder"
   }, {
       "name": 'C',
       "id": 'C',
       "icon": "fa fa-folder"
   }];

注意:我添加的 ParentName 是为了标识文件夹结构的层次结构。 ID 将与姓名相同。

对此有什么建议吗?

谢谢..

最佳答案

首次使用JSON.parse用于从有效的 JSON 生成对象字符串。

The JSON.parse() method parses a JSON string, constructing the JavaScript value or object described by the string. An optional reviver function can be provided to perform a transformation on the resulting object before it is returned.

然后,您可以使用迭代方法生成树,创建一个新对象,该新对象具有引用插入或引用的父对象所需的属性,使用临时对象。

这也适用于未排序和嵌套的项目。

var data = [{ Name: "A", ParentName: "Config", Type: "default" }, { Name: "SubA", ParentName: "A", Type: "default" }, { Name: "SubAFile", ParentName: "SubA", Type: "file" }, { Name: "B", ParentName: "Config", Type: "default" }, { Name: "C", ParentName: "Config", Type: "default" }],
    tree = function (data, root) {
        var r = [], o = {};
        data.forEach(function (a) {
            var temp = { name: a.Name, icon: a.Type === 'file' ? 'fa fa-file' : 'fa fa-folder' };
            if (o[a.Name] && o[a.Name].items) {
                temp.items = o[a.Name].items;
            }
            o[a.Name] = temp;
            if (a.ParentName === root) {
                r.push(temp);
            } else {
                o[a.ParentName] = o[a.ParentName] || {};
                o[a.ParentName].items = o[a.ParentName].items || [];
                o[a.ParentName].items.push(temp);
            }
        });
        return r;
    }(data, 'Config');

console.log(tree);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - JSON 字符串转 JS 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41648536/

相关文章:

javascript - Firestore : Does querying a collection also includes their sub collection?

javascript - 我的 jQuery 点击事件只工作一次

javascript - 如何在vis js中设置选项?

c++ - 将一个二维数组分配给另一个

java - 删除数组中重复的单词句子

javascript - 删除所有子元素后,Knockout 拖放找不到 "drop zone"

PHP从数组中删除重复的对象

sql - SELECT 查询以在一行中打印为 JSON 列表

iphone - 将 URL 解码为 JSON

ruby-on-rails - 强大的参数JSON API rails