循环解析 JSON devOps API

Parse JSON devOps API in a loop

我有一个 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'])