3

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?

2
  • So Africa is a file, not a folder ? Commented Jan 31, 2015 at 21:54
  • Yes. Just a file without an extension. A folder is always represented with an object, which can be either empty or containing other nested objects Commented Jan 31, 2015 at 21:55

2 Answers 2

3

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

Sign up to request clarification or add additional context in comments.

Comments

0

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.