首页 > 解决方案 > 访问深度嵌套字典中的数据

问题描述

使用代码,我可以毫无问题地搜索数据。但是假设我知道虚拟机的“名称”,但不想手动搜索它,但不知道它的“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"
}

标签: jsonpython-3.xdictionarynested

解决方案


您可以递归搜索树,例如(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')

推荐阅读