Represent directory tree as JSON
Question:
Is there any easy way to generate such a JSON? I found os.walk()
and os.listdir()
, so I may do recursive descending into directories and build a python object, well, but it sounds like reinventing a wheel, maybe someone knows working code for such a task?
{
"type": "directory",
"name": "hello",
"children": [
{
"type": "directory",
"name": "world",
"children": [
{
"type": "file",
"name": "one.txt"
},
{
"type": "file",
"name": "two.txt"
}
]
},
{
"type": "file",
"name": "README"
}
]
}
Answers:
I don’t think that this task is a “wheel” (so to speak). But it is something which you can easily achieve by means of the tools you mentioned:
import os
import json
def path_to_dict(path):
d = {'name': os.path.basename(path)}
if os.path.isdir(path):
d['type'] = "directory"
d['children'] = [path_to_dict(os.path.join(path,x)) for x in os.listdir
(path)]
else:
d['type'] = "file"
return d
print json.dumps(path_to_dict('.'))
I just had to do this (well, almost) so hit this page but the above doesn’t recurse into subdirectories.
So this version only handles directories, not files, but you could add those.
First generate a nested python dict:
def fs_tree(root):
results = {}
for (dirpath, dirnames, filenames) in os.walk(root):
parts = dirpath.split(os.sep)
curr = results
for p in parts:
curr = curr.setdefault(p, {})
return results
Secondly dump that to json using the json
module.
Is there any easy way to generate such a JSON? I found os.walk()
and os.listdir()
, so I may do recursive descending into directories and build a python object, well, but it sounds like reinventing a wheel, maybe someone knows working code for such a task?
{
"type": "directory",
"name": "hello",
"children": [
{
"type": "directory",
"name": "world",
"children": [
{
"type": "file",
"name": "one.txt"
},
{
"type": "file",
"name": "two.txt"
}
]
},
{
"type": "file",
"name": "README"
}
]
}
I don’t think that this task is a “wheel” (so to speak). But it is something which you can easily achieve by means of the tools you mentioned:
import os
import json
def path_to_dict(path):
d = {'name': os.path.basename(path)}
if os.path.isdir(path):
d['type'] = "directory"
d['children'] = [path_to_dict(os.path.join(path,x)) for x in os.listdir
(path)]
else:
d['type'] = "file"
return d
print json.dumps(path_to_dict('.'))
I just had to do this (well, almost) so hit this page but the above doesn’t recurse into subdirectories.
So this version only handles directories, not files, but you could add those.
First generate a nested python dict:
def fs_tree(root):
results = {}
for (dirpath, dirnames, filenames) in os.walk(root):
parts = dirpath.split(os.sep)
curr = results
for p in parts:
curr = curr.setdefault(p, {})
return results
Secondly dump that to json using the json
module.