【发布时间】:2020-09-15 20:14:55
【问题描述】:
我想从 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.
那么如何获取/打印 VM 的模式和名称?我真的是编码新手,不知道如何处理嵌套字典
【问题讨论】:
-
一个问题是你有嵌套对象在不同的地方使用相同的键(
VirtualMachine),这会导致答案冲突。因此,您可能需要澄清您希望moid和name来自哪个对象,以便任何人给出单一答案。 -
VirtualMachine是Folder的一部分,Folder是 another 的一部分,Folder是DataCenter的一部分。因此,您需要一次向下钻取一层。 -
另外,其中一些是数组,其元素由它们的位置来标识,而不是由名称(它们没有)。
-
some_dict[key]和some_list[index];链适当。只有在应用基本访问不包含结果和/或检查变得混乱之后,问题才会变得有些有趣。 -
FWIW:该错误不应来自呈现的代码。再次验证并更新问题。
标签: json python-3.x dictionary nested