我想从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.
那么,如何获取/打印虚拟机的名称和名称?我对编码真的很陌生,不知道如何处理嵌套字典
答案 0 :(得分:0)
但是您的问题似乎并不明确,但是从您提到的内容来看,如果您已经创建了数据框,则可以帮助您在嵌套json中导出值。您可以继续添加get()
,直到达到要求为止。以下是您可以使用的示例
import json
data = data.apply(lambda x: json.loads(json.loads(x).get("Folder","{}")).get("moid") if x else None)