我需要通过索引 (不是按键)从json文件 获取值
这是我的json文件
{
"db": {
"vendor": {
"product": {
"fruits": {
"price": {
"dollars": [
10,
2
],
"euros": [
11,
1.9
],
"pesos": [
16,
15
]
}
},
"vegatables": {
"price": {
"dollars": {
"0": 8,
"1": 2
},
"euros": {
"0": 10,
"1": 1.5
},
"pesos": {
"0": 15,
"1": 12
}
}
}
}
}
}
}
我的目标 - 为所有"产品"获得美元,欧元和比索的价值。 (在这个json文件中它只是水果和蔬菜)
我的代码:
import json
path_to_file = "C:\\Users\\admin\\Documents\\kolos\\data\\vegs.json";
with open(path_to_file) as data_file:
data = json.load(data_file)
lenght_of_products = (len(data["db"]["vendor"]["product"]))
for x in range(lenght_of_back):
print(data["db"]["vendor"]["product"][x]["price"]["dollars"])
我得到了
Traceback (most recent call last):
File "C:\\Users\\admin\\Documents\\kolos\\data\\vegs.json", line 12, in <module>
print(data["db"]["vendor"]["product"][x]["price"]["dollars"])
KeyError: 0
问题在于X变量。如果我尝试没有它,例如下面的代码,它就可以工作。
print(data["db"]["vendor"]["product"]["fruits"]["price"]["dollars"][0])
P.S
在我的另一个程序中,我使用类似的代码并且效果很好
...
for x in range(lenght_of_leagues):
print(data["leagues"][x]["id"])
...
答案 0 :(得分:1)
这是一个应该有效的版本(取决于你期望它做什么):
我将dict()更改为OrderedDict()以保留原始排序
我将.values()
添加到正在编入索引的字典中。此方法返回所有字典的列表,然后可以将其编入索引
以下是代码:
import json
from collections import OrderedDict
path_to_file = "test.json";
with open(path_to_file) as data_file:
data = OrderedDict(json.load(data_file))
length = (len(data["db"]["vendor"]["product"]))
for x in range(length):
print(data["db"]["vendor"]["product"].values()[x]["price"]["dollars"])
输出是:
{u'1': 2, u'0': 8}
[10, 2]
输出不同的原因是您的fruits
和vegetables
存储方式不同(一个是列表,另一个是字典)。如果你想以类似的方式迭代它们,你必须使它们相同。
答案 1 :(得分:0)
我认为输入字符串是错误的。
{
"d": {
"items": {
"vegatables": {
"spinach": 120,12,23,3445
}
}
}
}
JSON格式没有以下输入,必须将其更改为
{
"d": {
"items": {
"vegatables": {
"spinach": [120,12,23,3445]
}
}
}
}
然后以下命令将正常工作
print(data["d"]["items"]["vegatables"]["spinach"][0])