如何从嵌套字典json访问数据?

时间:2020-09-15 20:14:55

标签: json python-3.x dictionary nested

我想从json文件中获取一些数据。我可以使用下面的代码访问所有内容。

import json
    
with open('C:\\Users\\me\\Documents\\stdin.json', 'r', encoding='utf8', errors='ignore') as json_file:
data = json.load(json_file)
    
    
    print("Type: ", type(data))
    print("VM: ", data["Datacenter"])

.json文件如下所示:

{
   "Datacenter":[
      {
         "Folder":[
            {
               "Folder":[
                  {
                     "VirtualMachine":[
                        {
                           "moid":"vm-239566",
                           "name":"DEV CentOS 6",   
                        },
                        {
                           "moid":"vm-239464",
                           "name":"DEV Sles 12",
                        },
                     ],
                     "moid":"group-v239127",
                     "name":"DEV-VMs"
                  },
               ],
               "moid":"group-v78",
               "name":"Test and Dev"
            },
            {
               "VirtualMachine":[
                  {
                     "moid":"vm-66130",
                     "name":"Hyv16-clone",
                  }
               ],
               "moid":"group-v77",
               "name":"Templates"
            }
         ],
         "moid":"datacenter-21",
         "name":"Datencenter"
      }
   ],
   "vSphereHost":"srv01",
   "vSphereProductLine":"vpx",
   "vSphereServer":"VMware vCenter Server",
   "vSphereVersion":"xxx",
   "version":"1.0",
   "viewType":"VMs and Templates"
}

请注意,当我删除行以提高可读性时,原始的json文件要大得多。另请注意,我从命令行运行所有内容,因为我的IDE总是给我错误UnicodeEncodeError: 'charmap' codec can't encode characters in position 22910-22912: character maps to <undefined>

我尝试使用data["VirtualMachine"]而不是data["Datacenter"],但随后出现错误... TypeError: 'VirtualMachine' is an invalid keyword argument for this function. 那么,如何获取/打印虚拟机的名称和名称?我对编码真的很陌生,不知道如何处理嵌套字典

1 个答案:

答案 0 :(得分:0)

但是您的问题似乎并不明确,但是从您提到的内容来看,如果您已经创建了数据框,则可以帮助您在嵌套json中导出值。您可以继续添加get(),直到达到要求为止。以下是您可以使用的示例

import json
data = data.apply(lambda x: json.loads(json.loads(x).get("Folder","{}")).get("moid") if x else None)