我有一个如下所示的JSON对象。实际上是巨大的JSON文件,简化为提出这个问题。
"header": {
"headerAttributes": {
"pageCount": 5,
"totalCount": 5
}
},
"payload": [
{
"firstKey": [
{
"nestedKey_1": "1",
"nestedKey_2": "2"
},
{
"nestedKey_3": "3",
"nestedKey_4": "4"
}
]
}
]
现在我写了下面的python代码来访问[]里面的值。
Total_Orders_Count = json_response ['header']['headerAttributes']['totalCount']
for i in range(0,Total_Orders_Count):
dict = json_response ['payload'][i]
inner_dict = dict ['firstKey'] [0]
print inner_dict ['nestedKey_1'] + '(' + inner_dict['nestedKey_2'] + ')'
上面的代码工作正常。但是,dict [' firstKey'] [0]的使用对于超过1的值不起作用。
两个问题。 1.是否有更好的方法来访问[]内的键值。 2.我们可以在[]中找到值的长度。对于此列表," firstKey"下的值的长度。是2。
感谢任何帮助。
答案 0 :(得分:2)
直接遍历列表 。没有必要事先了解一个长度:
for d in json_response ['payload']:
for inner_dict in d['firstKey']:
print '{0[nestedKey_1]}({0]nestedKey_2})'.format(inner_dict)
for <name> in <listobject>
循环是for each construct;没有生成索引。相反,循环将列表中的每个元素分配给目标名称。
我将名称dict
更改为d
以避免屏蔽内置类型。我还使用string formatting将内部字典中的值放入字符串中。
请注意,我完全使用totalCount
键删除了。这里没有必要查看这个值。
至于查找列表的长度,只需使用len()
function即可。同样,没有必要使用该函数 here ,直接在列表上进行迭代不需要预先生成索引。
答案 1 :(得分:0)
在您提供的JSON中,有效负载的外部列表中只有一个元素。但是代码试图访问该列表的前5个元素,这些元素不存在。
尽量避免直接访问像di['key']
这样的列表中的值,而是使用'di.get('key','default')`,除非您确定它存在。
要遍历keys-values并获取'firstKey'下的值的长度,请使用以下代码:
for payload in json_response.get('payload',[]) :
# Length of values under firstKey
print(len(payload.get('firstKey',[])))
# To access nested Keys
for i in payload.get('firstKey',[]) :
for k,v in i.items() :
print(k,':',v)