首页 > 解决方案 > 循环解析 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']

标签: pythonjsonjsonparser

解决方案


首先,这个问题与解析 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'])

编辑:检查字典后,我看到几个缺少括号。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"
                }
             }
         }
     ]
}

推荐阅读