python - 循环解析 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'])
编辑:检查字典后,我看到几个缺少括号。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"
}
}
}
]
}
推荐阅读
- powershell - 为 Active Directory 中的所有用户启用还原点的脚本
- amazon-web-services - 使用命令行参数错误创建 Cognito 测试用户
- reactjs - 单击“react-router-dom”v5 链接时,在 div 中呈现不同的组件
- java - 使用 Cplex 音乐会在 Java Eclipse 中 MIQP 到 MILP 线性化
- r - R中的正则表达式:如何分隔或省略正则表达式组来解析成绩单?(不等行的大问题)
- mysql - 计算所有列中包含指定字符串的单元格/行
- python - 我想使用命令提示符创建我的第一个 URL
- java - 我可以以某种方式创建类型参数列表吗?
- python - 使用 ibkr TWS 时,为什么我的代码第一次工作然后停止,除非我重新启动 TWS?
- reactjs - 使用 React 测试库测试 Material-UI 菜单组件的预期方法是什么?