Javascript 根据json文件上的定义创建文件夹结构

Javascript 根据json文件上的定义创建文件夹结构,javascript,json,node.js,filesystems,Javascript,Json,Node.js,Filesystems,如何使用此json结构创建文件夹结构 { "europe": { "poland":{}, "france":{}, "spain":{}, "greece":{}, "UK":{}, "germany":"txt" }, "Asia": { "india":"xml" }, "Africa":null } 以这样的方式 具有对象值的属性将成为文件夹 具有字符串值的属性是文件,其值表示其扩展名 具有null值的属性是没

如何使用此json结构创建文件夹结构

{
  "europe": {
    "poland":{},
    "france":{},
    "spain":{},
    "greece":{},
    "UK":{},
    "germany":"txt"
  },
  "Asia": {
    "india":"xml"
  },
  "Africa":null
}
以这样的方式

  • 具有对象值的属性将成为文件夹
  • 具有字符串值的属性是文件,其值表示其扩展名
  • 具有null值的属性是没有扩展名的文件
  • 嵌套对象成为嵌套文件夹

  • 有人知道如何在nodejs中实现这一点吗?

    您必须递归迭代并创建文件夹和文件

    没有测试,但类似的东西应该很接近

    var fs  = require('fs');
    var obj = {
        "europe": {
            "poland": {},
            "france": {},
            "spain": {},
            "greece": {},
            "UK": {},
            "germany": "txt"
        },
        "Asia": {
            "india": "xml"
        },
        "Africa": null
    };
    
    (function create(folder, o) {
        for (var key in o) {
            if ( typeof o[key] === 'object' && o[key] !== null) {
                fs.mkdir(folder + key, function() {
                    if (Object.keys(o[key]).length) {
                        create(folder + key + '/', o[key]);
                    }
                });
            } else {
                fs.writeFile(folder + key + (o[key] === null ? '' : '.' + o[key]));
            }
        }
    })('/', obj);
    

    更新

    我还在寻找一种基于JSON创建文件和文件夹的解决方案,并发现了这个有趣的节点模块“node jsondir”

    以下是它的工作原理示例:

    var jsondir = require('jsondir');
    
    jsondir.json2dir({
        "-path": 'path/to/directory',
        "myfile": {
            "-content": 'Hello world!'
        },
        "mydir": {
            "a": {
                "b": {
                    "c": {
                        "-type": 'd'
                    }
                }
            },
            "1": {
                "2": {
                    "3": {}
                }
            }
        }
    }, function(err) {
        if (err) throw err;
    });
    
    经过测试,效果良好


    节点模块是

    所以非洲是一个文件,而不是文件夹?是的。只是一个没有扩展名的文件。文件夹始终用对象表示,对象可以是空的,也可以包含其他嵌套对象