python对象层次结构_python – 将JSON对象排序为层次结构

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 a dictionary that maps id names to JSON items.

#ex. itemsKeyedById["9Xdd"] gives the jpg item with id "9Xdd"

itemsKeyedById = {i["id"]: i for i in myJson}

#iterate through each item in the `myJson` list.

for item in myJson:

#does the item have a parent?

if "parent" in item:

#get the parent item

parent = itemsKeyedById[item["parent"]]

#if the parent item doesn't have a "children" member,

#we must create one.

if "children" not in parent:

parent["children"] = []

#add the item to its parent's "children" list.

parent["children"].append(item)

#filter out any item that has a parent.

#They don't need to appear at the top level,

#since they will appear underneath another item elsewhere.

topLevelItems = [item for item in myJson if "parent" not in item]

print topLevelItems

输出(由我添加缩进):

[

{

'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'

}

]

它也适用于嵌套多个深度的项目.输入示例:

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"

},

]

输出:

[

{

'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'

}

]

}

]

}

]

}

]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值