json - 访问深度嵌套字典中的数据
问题描述
使用代码,我可以毫无问题地搜索数据。但是假设我知道虚拟机的“名称”,但不想手动搜索它,但不知道它的“uuid”..代码是否有可能(循环?)通过整个json文件(它嵌套很深),找到那个“名字”并返回“uuid”?有点像这样if "name" == "DEV Ubuntu 18": print("uuid")
,我知道它并不像上面那样简单,但它仅作为我想要实现的解释。
import json
with open('path_to_json_file', 'r', encoding='utf8', errors='ignore') as json_file:
data = json.load(json_file)
access = json.dumps(data['Datacenter'][0]['Folder'][0]["Folder"][0]["VirtualMachine"], indent = 4)
print(type(access))
print(access)
json文件:
{
"Datacenter":[
{
"Folder":[
{
"Folder":[
{
"VirtualMachine":[
{
"moid":"vm-239615",
"name":"DEV Ubuntu 18",
"uuid":"xxxxf4cb-da88-322e-dee2-e3522ea7b506"
},
{
"moid":"vm-239345",
"name":"DEV Windows 2012 R2",
"uuid":"xxxx4b70-5fac-3bf9-32cf-278cd4946dde"
}
],
"moid":"group-v239127",
"name":"DEV-VMs"
},
{
"VirtualMachine":[
{
"moid":"vm-100352",
"name":"QA-VM-Ubuntu 16 with VTL",
"uuid":"xxxxe624-cc44-c70a-34e8-dcb67e965e91"
},
{
"moid":"vm-233122",
"name":"QA-VM-100mbVM",
"uuid":"xxxxa6f3-3dde-1ad2-f5f1-476c29f28769"
}
],
"moid":"group-v46664",
"name":"MKO"
},
{
"VirtualMachine":[
{
"moid":"vm-240199",
"name":"JRO-CentOS",
"uuid":"xxxx85b9-554d-9806-827e-ce5f4b051385"
},
{
"moid":"vm-102388",
"name":"2012-Hyper-JRO",
"uuid":"xxxxbe1e-0ce6-ac0c-a25b-f1b48a8348bb"
}
],
"moid":"group-v46628",
"name":"JRO"
},
{
"Folder":[
{
"VirtualMachine":[
{
"moid":"vm-66108",
"name":"W12R2-C3",
"uuid":"xxxxff31-7cee-379e-c0c0-4dece4ee5fb3"
},
{
"moid":"vm-65949",
"name":"W12R2-C1",
"uuid":"xxxx6c7f-36fc-33e8-28d0-29577bb1d824"
}
],
"moid":"group-v59548",
"name":"Cluster"
}
],
"VirtualMachine":[
{
"moid":"vm-45939",
"name":"JuneauABU",
"uuid":"xxxx21ee-f74d-6088-dbd8-1650563ad387"
},
{
"moid":"vm-232139",
"name":"MS-SQL-ABU",
"uuid":"xxxx5e99-4228-dbe7-1a77-66a4a28f017e"
}
],
"moid":"group-v45859",
"name":"ABU"
},
{
"moid":"group-v238549",
"name":"JRO-Testrestores"
},
{
"Folder":[
{
"VirtualMachine":[
{
"moid":"vm-66306",
"name":"AMoSrv2016_syspreped",
"uuid":"xxxx5f48-7476-d74a-b032-b636e4eb3395"
},
{
"moid":"vm-84436",
"name":"AMoCentOS",
"uuid":"xxxx811f-3713-ec1b-cbc1-f8a30f1acda7"
},
{
"moid":"vm-66251",
"name":"AMoWin10deUEFI",
"uuid":"xxxx6bab-d209-270b-5483-b3038e26f26a"
}
],
"moid":"group-v36628",
"name":"Templates"
}
],
"VirtualMachine":[
{
"moid":"vm-238822",
"name":"AMo2008R2",
"uuid":"xxxx3f34-3dc1-0282-fdac-5767e0c4bd30"
},
{
"moid":"vm-228634",
"name":"AMoSrv2012R2",
"uuid":"xxxx7ca2-b44e-4172-91fb-67bc6a8e2269"
}
],
"moid":"group-v36123",
"name":"AMo"
},
{
"Folder":[
{
"moid":"group-v70995",
"name":"CMonTest"
}
],
"moid":"group-v70878",
"name":"NFO"
},
{
"VirtualMachine":[
{
"moid":"vm-228443",
"name":"HNI-DC",
"uuid":"xxxx741f-4c93-4e6a-9917-9fe94e43ace7"
},
{
"moid":"vm-66063",
"name":"HNI-BACKUP",
"uuid":"xxxxdfff-b185-4bc9-61f6-40f8dc8a6d34"
}
],
"moid":"group-v30017",
"name":"HNI"
},
{
"VirtualMachine":[
{
"moid":"vm-231997",
"name":"MSZ-QuadStorVTL",
"uuid":"xxxx94c5-7d2d-4108-3812-65a90cf7e280"
}
],
"moid":"group-v232049",
"name":"MSZ"
},
{
"VirtualMachine":[
{
"moid":"vm-239216",
"name":"jan-vcenter1",
"uuid":"xxxx5493-ab3e-9c59-464e-121e2beef54f"
},
{
"moid":"vm-229233",
"name":"jan-win2012r2-1",
"uuid":"xxxxdc46-1483-a9b5-2eca-3e4a859a54be"
},
{
"moid":"vm-229682",
"name":"jan-win2012-1",
"uuid":"xxxx106c-98e1-84b9-ccb6-c1cf649e1c7f"
}
],
"moid":"group-v225473",
"name":"JAN"
},
{
"VirtualMachine":[
{
"moid":"vm-225526",
"name":"TCSRouter",
"uuid":"xxxx5e9b-82bb-7c89-43a0-798c7708e6f9"
},
{
"moid":"vm-225286",
"name":"TCSSupportPC",
"uuid":"xxxxc7f3-2df6-8c6f-1ca4-43dc399fdef2"
}
],
"moid":"group-v225280",
"name":"TCS"
},
{
"Folder":[
{
"VirtualMachine":[
{
"moid":"vm-234753",
"name":"wru-Domain Server",
"uuid":"xxxx36ae-ab06-bdd6-8943-d78d935d66ff"
},
{
"moid":"vm-234746",
"name":"wru-CSV-Pool",
"uuid":"xxxx3a1c-5ae9-0ca7-9139-d397c67ebd7d"
}
],
"moid":"group-v234751",
"name":"Hyper-V Cluster"
},
{
"VirtualMachine":[
{
"moid":"vm-215006",
"name":"wru-xTmpl-2019",
"uuid":"xxxx4e83-4ae6-409e-bba8-08873198c422"
},
{
"moid":"vm-220809",
"name":"wru-xTmpl-2019-clean-testing",
"uuid":"xxxx09c9-d208-eb0c-1136-49dc4322440c"
}
],
"moid":"group-v220815",
"name":"Templates"
},
{
"VirtualMachine":[
{
"moid":"vm-214328",
"name":"wru-xSP-Windows 10 x64",
"uuid":"xxxxf01e-4fa8-0138-0888-c60cb1995e54"
},
{
"moid":"vm-214322",
"name":"wru-xSP-Domain Server",
"uuid":"xxxx5de5-c4de-e6f1-3892-85f84b5a1319"
}
],
"moid":"group-v219074",
"name":"xSP"
},
{
"VirtualMachine":[
{
"moid":"vm-220847",
"name":"wru-Test-kleine-Disk",
"uuid":"xxxx4342-03aa-0cf6-3023-9de6ddb0cb2f"
},
{
"moid":"vm-220879",
"name":"wru-Test-4-Partitionen",
"uuid":"xxxxb689-b729-f78f-8821-f8f98ba4ac9c"
}
],
"moid":"group-v220961",
"name":"ESX Testing"
}
],
"VirtualMachine":[
{
"moid":"vm-234748",
"name":"wru-Exchange 2019",
"uuid":"xxxx58ee-95c0-a0dd-36bb-a820b64cee73"
},
{
"moid":"vm-212763",
"name":"wru-AppServer",
"uuid":"xxxx8d7e-40a3-d893-f4a6-be050a469076"
}
],
"moid":"group-v210013",
"name":"WRU"
},
{
"VirtualMachine":[
{
"moid":"vm-224202",
"name":"SchSQL",
"uuid":"xxxxe6ad-44a3-c968-9c0b-619c75a5307c"
},
{
"moid":"vm-224174",
"name":"SchExchange",
"uuid":"xxxx5e8f-6d33-6b8d-73b9-a1797829f9f5"
}
],
"moid":"group-v87215",
"name":"Schulung(AMo)"
},
{
"VirtualMachine":[
{
"moid":"vm-224840",
"name":"RnDSupportPC",
"uuid":"xxxxa1df-f975-6557-dfad-be3bde42153a"
},
{
"moid":"vm-224727",
"name":"rndrouter",
"uuid":"xxxx14d3-a0a8-95e9-9c3a-a80dbe629435"
}
],
"moid":"group-v224726",
"name":"RnD"
},
{
"Folder":[
{
"VirtualMachine":[
{
"moid":"vm-223623",
"name":"KleinCentOS4",
"uuid":"xxxxa50e-39fd-e521-34ba-49b34c5a9633"
},
{
"moid":"vm-223626",
"name":"KleinCentOS5",
"uuid":"xxxxe3a3-d3c0-4c68-6886-9cbd6cd7bebe"
}
],
"moid":"group-v223616",
"name":"KleineVMs"
}
],
"VirtualMachine":[
{
"moid":"vm-238223",
"name":"HHDCKeyGen01_restored20200812_6",
"uuid":"xxxxc1dd-904e-256c-d51b-a3be77269282"
},
{
"moid":"vm-229804",
"name":"americium2019",
"uuid":"xxxx3ed7-8f77-0f51-213e-f8c9448f4784"
}
],
"moid":"group-v5653",
"name":"AHE"
},
{
"VirtualMachine":[
{
"moid":"vm-238666",
"name":"sga-centos8",
"uuid":"xxxxbd67-16fd-dc3b-4425-791ca07c0a65"
},
{
"moid":"vm-37503",
"name":"sga-win2016",
"uuid":"xxxx1290-51bf-6330-bde8-256fd6306b3f"
}
],
"moid":"group-v24071",
"name":"SGA"
},
{
"Folder":[
{
"VirtualMachine":[
{
"moid":"vm-237038",
"name":"dummy4_repl12",
"uuid":"xxxxa665-326e-1f4f-ecc3-6db92285fb16"
},
{
"moid":"vm-206872",
"name":"dummy1",
"uuid":"xxxx51ab-fdb0-496a-d115-6048301c4916"
}
],
"moid":"group-v234595",
"name":"testFolder"
}
],
"VirtualMachine":[
{
"moid":"vm-236310",
"name":"dummy123",
"uuid":"xxxx0e69-9765-73f7-c394-9f00fe19a538"
},
{
"moid":"vm-206785",
"name":"VMwareESXi_SpectrumScale_5.0.0.0_TrialVM",
"uuid":"xxxx54da-8336-832a-d2bc-754931ab12f0"
}
],
"moid":"group-v148654",
"name":"BPO"
},
{
"Folder":[
{
"VirtualMachine":[
{
"moid":"vm-66171",
"name":"ONTAP Simulator 8.1.7 (7-Mode)",
"uuid":"xxxxb759-443a-c933-379d-b0094780be13"
},
{
"moid":"vm-35848",
"name":"ONTAP Simulator 8 (Cluster Mode)",
"uuid":"xxxxf24c-e2f2-daf1-6c19-5847bb64381d"
}
],
"moid":"group-v21667",
"name":"NetAPP"
},
{
"moid":"group-v142779",
"name":"S3 Freezer"
}
],
"VirtualMachine":[
{
"moid":"vm-35311",
"name":"hfzbuildlin64 (Leap 15.1) (HiFreezer)",
"uuid":"xxxx2cb2-349c-c648-385a-9b7cb3c41c4f"
},
{
"moid":"vm-236213",
"name":"hfr buildor",
"uuid":"xxxx689c-0718-f71a-fc2b-cb8f872d1071"
},
{
"moid":"vm-27024",
"name":"RnD CMSYS",
"uuid":"xxxx8ebd-b86d-2115-745d-fc974427c174"
}
],
"moid":"group-v451",
"name":"HFR"
},
{
"VirtualMachine":[
{
"moid":"vm-84882",
"name":"small_vm",
"uuid":"xxxx15f1-5a36-6bf6-6f82-2ca38e62be6c"
}
],
"moid":"group-v82909",
"name":"DSC"
},
{
"Folder":[
{
"VirtualMachine":[
{
"moid":"vm-130242",
"name":"Maschine 1(DC)",
"uuid":"xxxxcb18-6bc1-bf3f-e441-7563a6d7c8d1"
}
],
"moid":"group-v130237",
"name":"Exchange2016"
},
{
"VirtualMachine":[
{
"moid":"vm-51219",
"name":"A",
"uuid":"xxxxbb15-28b9-473e-3000-904db38668b3"
},
{
"moid":"vm-173263",
"name":"Lnx_small_multidisk_01",
"uuid":"xxxx0ef0-a282-797b-fc14-3a64e8704572"
},
{
"moid":"vm-83088",
"name":"QA-VM-100mbVM",
"uuid":"xxxxf7af-47d3-5fc7-dbae-6cc259364cf6"
}
],
"moid":"group-v172448",
"name":"Special Test VMs"
},
{
"VirtualMachine":[
{
"moid":"vm-234851",
"name":"W16HVcluster02",
"uuid":"xxxx8aa1-8998-4718-541c-f8b6a93764de"
},
{
"moid":"vm-233638",
"name":"QA-W19Cluster01",
"uuid":"xxxx6ecb-4c02-82ea-9089-4ec660cb7ffb"
}
],
"moid":"group-v226489",
"name":"WinServer2019Cluster"
},
{
"Folder":[
{
"VirtualMachine":[
{
"moid":"vm-60285",
"name":"QA-Win2012R2-CVM03",
"uuid":"xxxx85f3-0adf-0cbf-b4ba-f483e1f486fc"
}
],
"moid":"group-v59779",
"name":"2012R2"
},
{
"VirtualMachine":[
{
"moid":"vm-59616",
"name":"QA-Win2016-CVM01",
"uuid":"xxxxe4b5-d0fd-321b-f61d-4af3c1c730c3"
},
{
"moid":"vm-60362",
"name":"QA-Win2016-CVM02",
"uuid":"xxxx789e-ad9d-c3fd-01a4-b877408d5c43"
}
],
"moid":"group-v59777",
"name":"2016"
},
{
"VirtualMachine":[
{
"moid":"vm-191562",
"name":"QA-Win2019-CVM03",
"uuid":"xxxxe4ef-04f7-96ff-6832-75e4aa864bc9"
},
{
"moid":"vm-191561",
"name":"QA-Win2019-CVM02",
"uuid":"xxxxa66b-29de-17c3-7470-699856c85c62"
}
],
"moid":"group-v191249",
"name":"2019"
}
],
"moid":"group-v59212",
"name":"Cluster"
},
{
"VirtualMachine":[
{
"moid":"vm-233135",
"name":"SVC-CentOS7-01",
"uuid":"xxxx3ad1-c5d4-8b7b-4b6e-579659f88ce8"
},
{
"moid":"vm-233131",
"name":"SVC-Win2016-01",
"uuid":"xxxx0789-0ee0-d311-b017-e6d8a1459979"
}
],
"moid":"group-v233129",
"name":"SVCtests"
}
],
"VirtualApp":[
{
"VirtualMachine":[
{
"moid":"vm-229521",
"name":"QARestoreWin01",
"uuid":"xxxx98be-c3ba-afe8-631f-5a17b97e40bf"
},
{
"moid":"vm-230032",
"name":"QARestoreLnx02",
"uuid":"xxxxa640-2dfe-8ec9-444d-5841b49ecf4d"
}
],
"moid":"resgroup-v229520",
"name":"DataCenter Restore Tests"
}
],
"moid":"group-v22465",
"name":"QA-VM-Pool"
}
],
"moid":"group-v78",
"name":"Test and Dev"
},
{
"VirtualMachine":[
{
"moid":"vm-66130",
"name":"Hyv16-clone",
"uuid":"xxxxdc87-a284-32d2-db75-5ff3df28d9d7"
}
],
"moid":"group-v77",
"name":"Templates"
}
],
"moid":"datacenter-21",
"name":"xxxx Datencenter"
}
],
"vSphereHost":"hhvmsrv01",
"vSphereProductLine":"vpx",
"viewType":"VMs and Templates"
}
解决方案
您可以递归搜索树,例如(d
是您的问题中的数据):
def find_uuid(d, name):
if isinstance(d, dict):
for k, v in d.items():
if k == 'name' and v == name and 'uuid' in d:
yield d['uuid']
else:
yield from find_uuid(v, name)
elif isinstance(d, list):
for v in d:
yield from find_uuid(v, name)
uuid = next(find_uuid(d, 'DEV Ubuntu 18'))
print(uuid)
印刷:
xxxxf4cb-da88-322e-dee2-e3522ea7b506
编辑:要处理不存在的 VM,您可以执行以下操作:
for uuid in find_uuid(d, 'xxx'):
print(uuid)
break
else:
print('VM not found')
或者把它放在里面try..except
:
try:
uuid = next(find_uuid(d, 'xxx'))
print(uuid)
except StopIteration:
print('VM not found')
推荐阅读
- opengl - 在片段着色器中将世界空间光位置转换为模型空间的问题
- json - 从 IBAction 调用的 dispatchqueue.main.async 中跳过了 Https 请求
- boost - 由于未定义对 Boost 和事件库的引用而无法编译?
- reactjs - react native如何实现一个和whatsapp一样的调用系统?
- javascript - javascript,单击时更改与单击的元素不同的元素的html
- r - 一次将可格式化的格式应用于所有列
- docker - 我如何将带有 -p 80:80 的 docker 命令翻译为 kubernetes yaml
- html - 为什么我的列出现在彼此下方而不是下一个?
- .htaccess - 将文件夹重定向到同一文件夹中的文件下载
- python - 加载导入统计模型时如何修复错误“找不到指定的模块”?