问题描述
{
"count": 12,"value": [
{
"id": 1,"workItemId": 1,"rev": 1,"fields": {
"System.Id": {
"newValue": 1
},"System.AreaId": {
"newValue": 2
},{
"id": 2,"workItemId": 2,"rev": 2,"fields": {
"System.Rev": {
"oldValue": 1,"newValue": 2
},"System.State": {
"oldValue": "New","newValue": "Qualification"
}
}}}}}
我需要使用以下循环检索 System.State:
for i in json['value']:
for item in i['fields']:
print(i['System.State']['newValue'])
不幸的是,有一个 KeyError 'fields',我不知道为什么。
它只适用于第一个元素:
json['value'][0]['fields']['System.State']['newValue']
解决方法
首先这个问题与解析json无关。其次,在 json["value"]["fields"]
内部进行迭代时,例如;
for i in json['value']:
for item in i['fields']:
print(i['System.State']['newValue']) # error getting raised in this line
有 4 种不同的字典,其中只有一个具有 ["System.State"] 键,因此当键不存在时,会引发错误。 为了克服这个问题,您只需添加一个简单的控制语句;
for i in json['value']:
for item in i['fields']:
if 'System.State' in i:
print(i['System.State']['newValue'])
编辑: 在检查了 dict 后,我看到了几个缺少的括号。 json 数据可以是这样的;
{
"count": 12,"value": [
{
"id": 1,"workItemId": 1,"rev": 1,"fields": {
"System.Id": {
"newValue": 1
},"System.AreaId": {
"newValue": 2
},}
},{
"id": 2,"workItemId": 2,"rev": 2,"fields": {
"System.Rev": {
"oldValue": 1,"newValue": 2
},"System.State": {
"oldValue": "New","newValue": "Qualification"
}
}
}
]
}
,
我的解决方案:
fields=[]
for i in json['value']:
if 'fields' in i:
value.append(i['fields'])
for i in fields:
if 'System.State' in i:
print(i['System.State']['newValue'])