【问题标题】:Create a file tree format in JSON based on other JSON data基于其他 JSON 数据以 JSON 格式创建文件树格式
【发布时间】:2022-01-13 19:02:47
【问题描述】:

我想基于其他 JSON 以 JSON 格式创建文件树格式。这个想法是以树格式重新组织 JSON 数据。

请注意,文件的名称表示它在树中的位置。

假设我们有第一个 JSON:

    {
        "dir1/file3.xyz":
        [
            18KB,
            "2020-01-01 00:00:00"
        ],
        "dir1/file4.xyz":
        [
            18KB,
            "2020-01-02 00:00:00"
        ],
        "dir1/subdir1/file5.xyz":
        [
            18KB,
            "2020-01-01 00:00:00"
        ],
        "dir1/subdir1/file6.xyz":
        [
            18KB,
            "2020-01-02 00:00:00"
        ],
        "file1.xyz":
        [
            18KB,
            "2020-01-01 00:00:00"
        ],
        "file2.xyz":
        [
            18KB,
            "2020-01-02 00:00:00"
        ]
    }

我想根据之前的 JSON 格式创建一个 JSON:

    [
    directories: [
        {
            name: 'dir1',
            directories: [
                {
                    name: 'subdir1',
                    directories: [],
                    files: [
                        {
                            name: 'file5.xyz',
                            size: '19KB',
                            modified: '2020-01-01 00:00:00'
                        },
                        {
                            name: 'file6.xyz',
                            size: '20KB',
                            modified: '2020-01-02 00:00:00'
                        }
                    ]
                }
            ],
            files: [
                {
                    name: 'file3.xyz',
                    size: '19KB',
                    modified: '2020-01-01 00:00:00'
                },
                {
                    name: 'file4.xyz',
                    size: '20KB',
                    modified: '2020-01-02 00:00:00'
                }
            ]
        }
    ],
    files: [
        {
            name: 'file1.xyz',
            size: '19KB',
            modified: '2020-01-01 00:00:00'
        },
        {
            name: 'file2.xyz',
            size: '20KB',
            modified: '2020-01-02 00:00:00'
        }
    ]

感谢您的宝贵时间。

【问题讨论】:

  • 您好,欢迎来到 SO。您表明您正在努力解决您的问题,这对社区很重要。在我看来,最好的方法是包含你目前拥有的基于 text 的源代码版本,即使它运行不正确。

标签: javascript python json


【解决方案1】:

我们使用下面的 JavaScript 代码逻辑解决了这个挑战:

function fillWithZero(intValue){
    return intValue > 9 ? intValue : '0' + intValue;
}
function list_to_tree(list) {
    var map = {}, i;
    var root = {};
    root.text = '/';
    root.value = '';
    root.disabled = true;
    root.children = [];
    map['/'] = root;
    for (i = 0; i < list.length; i += 1) {
        node = list[i];
        var current = {};
        var d = node.date;
        var datestring = fillWithZero(d.getDate()) + "-" + fillWithZero(d.getMonth()+1) + "-" + d.getFullYear() + " " + fillWithZero(d.getHours()) + ":" + fillWithZero(d.getMinutes()) + ":" + fillWithZero(d.getSeconds());
        current.text = node.name + ' - Size: ' + parseInt(node.size/1024) + 'KB' + ' Modified: ' + datestring;
        current.value = node.name;
        var parent = root;
        if (node.name.indexOf('/') > 0) {
            var paths = node.name.split('/');
            for (j = 0; j < paths.length - 1; j += 1) {
                var dirId = paths[j];
                var dir = map[dirId];
                if (dir == null) {
                    dir = {};
                    dir.text = dirId;
                    dir.value = dirId;
                    if(parent != root){
                        dir.value = parent.value + '/' + dirId;
                    }
                    dir.disabled = true;
                    dir.children = [];
                    map[dirId] = dir;                   
                    parent.children.push(dir);
                }
                parent = dir;
            }
            current.text = node.name.substr(node.name.lastIndexOf('/') + 1, node.name.length) + ' - Size: ' + parseInt(node.size/1024) + 'KB' + ' Modified: ' + datestring;
        }
        parent.children.push(current);
    }
    return root;
}
var entries = [{
        "name": "dir1/file1.xyz",
        "size": 4234,
        "date": new Date()
    }, {
        "name": "dir1/file2.xyz",
        "size": 4234,
        "date": new Date()
    }, {
        "name": "dir1/subdir1/file3.xyz",
        "size": 4234,
        "date": new Date()
    }, {
        "name": "dir1/subdir1/file4.xyz",
        "size": 4234,
        "date": new Date()
    }, {
        "name": "file3.xyz",
        "size": 4234,
        "date": new Date()
    }, {
        "name": "file4.xyz",
        "size": 4234,
        "date": new Date()
    }
];
console.log(list_to_tree(entries));

【讨论】:

    猜你喜欢
    • 2020-04-17
    • 2021-06-24
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 2015-12-18
    • 1970-01-01
    • 2013-08-20
    • 1970-01-01
    相关资源
    最近更新 更多