循环解析 JSON devOps API

问题描述

我有一个 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"
                }
            }}}}}

我需要使用以下循环检索 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'])