i need sort out json array hierarchy, here json file, it's never ordered follow structure:
{ "name":"folder 2", "id":"zrdg", "parent":"oy00", "type":"folder" }, { "name":"folder 1", "id":"oy00", "type":"folder" }, { "name":"folder 3", "id":"zde1", "type":"folder" }, { "name":"dx00025.jpg", "id":"9xdd", "parent":"oy00", "type":"jpeg" }
into json file, structure this:
{ "name":"folder 1", "id":"oy00", "type":"folder", "children": [{ "name":"folder 2", "id":"zrdg", "type":"folder" }, { "name":"dx00025.jpg", "id":"9xdd", "type":"jpeg" }] }, { "name":"folder 3", "id":"zde1", "type":"folder" }
i can't figure out, i'm new python, start(wrong):
for index,item in result: if item['parent']: item2 in result: if item2['id'] == item['parent']: item['children'] = item2 brake
this ok, problem not correct python, folder1/folder2/folder3/ wont work this, need recursive function. should include structure changes, can folder withing folder , files withing folder/folders combination.
myjson = [ { "name":"folder 2", "id":"zrdg", "parent":"oy00", "type":"folder" }, { "name":"folder 1", "id":"oy00", "type":"folder" }, { "name":"folder 3", "id":"zde1", "type":"folder" }, { "name":"dx00025.jpg", "id":"9xdd", "parent":"oy00", "type":"jpeg" } ] #this creates dictionary maps id names json items. #ex. itemskeyedbyid["9xdd"] gives jpg item id "9xdd" itemskeyedbyid = {i["id"]: in myjson} #iterate through each item in `myjson` list. item in myjson: #does item have parent? if "parent" in item: #get parent item parent = itemskeyedbyid[item["parent"]] #if parent item doesn't have "children" member, #we must create one. if "children" not in parent: parent["children"] = [] #add item parent's "children" list. parent["children"].append(item) #filter out item has parent. #they don't need appear @ top level, #since appear underneath item elsewhere. toplevelitems = [item item in myjson if "parent" not in item] print toplevelitems
output (with indentation added me):
[ { 'name': 'folder 1', 'id': 'oy00', 'type': 'folder', 'children': [ { 'name': 'folder 2', 'id': 'zrdg', 'parent': 'oy00', 'type': 'folder' }, { 'name': 'dx00025.jpg', 'id': '9xdd', 'parent': 'oy00', 'type': 'jpeg' } ] }, { 'name': 'folder 3', 'id': 'zde1', 'type': 'folder' } ]
it works items nested more 1 deep. example input:
myjson = [ { "name":"toplevel folder", "id":"0", "type":"folder", }, { "name":"midlevel folder", "id":"1", "type":"folder", "parent":"0" }, { "name":"bottom level folder", "id":"2", "type":"folder", "parent":"1" }, { "name":"vacation picture", "id":"3", "type":"jpg", "parent":"2" }, ]
output:
[ { 'type': 'folder', 'name': 'toplevel folder', 'id': '0', 'children': [ { 'type': 'folder', 'name': 'midlevel folder', 'parent': '0', 'id': '1', 'children': [ { 'type': 'folder', 'name': 'bottom level folder', 'parent': '1', 'id': '2', 'children': [ { 'type': 'jpg', 'name': 'vacation picture', 'parent': '2', 'id': '3' } ] } ] } ] } ]
Comments
Post a Comment