从JSON文件的定义创建文件夹结构

3
我该如何使用这个JSON结构创建文件夹结构?
{
  "europe": {
    "poland":{},
    "france":{},
    "spain":{},
    "greece":{},
    "UK":{},
    "germany":"txt"
  },
  "Asia": {
    "india":"xml"
  },
  "Africa":null
}

以这样的方式,

  1. 具有对象值的属性变成文件夹
  2. 具有字符串值的属性是文件,它们的值表示它们的扩展名
  3. 具有 null 值的属性是没有扩展名的文件
  4. 嵌套对象变成嵌套文件夹

有人知道如何在 Node.js 中实现这个功能吗?


那么 Africa 是一个文件,不是一个文件夹? - adeneo
是的。只是一个没有扩展名的文件。文件夹总是用一个对象表示,可以是空的,也可以包含其他嵌套的对象。 - shanks
2个回答

3

您需要递归迭代并创建文件夹和文件。

尚未测试,但类似以下内容应该接近

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);

FIDDLE


0

更新

我也在寻找一种根据JSON创建文件和文件夹的解决方案,并发现了这个有趣的Node模块“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;
});

测试过了,它可以正常工作。

Node 模块是 https://www.npmjs.com/package/jsondir


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接