shanks
shanks

Reputation: 922

Creating a folder structure from definitions on a json file

how can i create a folder structure using this json structure

{
  "europe": {
    "poland":{},
    "france":{},
    "spain":{},
    "greece":{},
    "UK":{},
    "germany":"txt"
  },
  "Asia": {
    "india":"xml"
  },
  "Africa":null
}

in such a way that

  1. properties with object values become folders
  2. properties with string values are files and their values represent their extensions
  3. properties with null values are files with no extension
  4. nested objects become nested folders

anyone know how to do this in nodejs?

Upvotes: 3

Views: 6669

Answers (2)

Ahmadreza Vakil
Ahmadreza Vakil

Reputation: 31

Update

I was also looking for a solution to create files and folders based on a JSON and found this interesting node module "node-jsondir"

Here is an example of how it works:

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

Tested and it works.

Node module is https://www.npmjs.com/package/jsondir

Upvotes: 0

adeneo
adeneo

Reputation: 318322

You'll have to recursively iterate and create folders and files.

Not tested, but something like this should be close

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

Upvotes: 3

Related Questions