【发布时间】:2018-12-06 16:03:39
【问题描述】:
所以我能够返回几乎所有数据,除了我无法捕获这样的东西:
"expand": "schema"
"issues": [
{
"expand": "<>",
"id": "<>",
"self": "<>",
"key": "<>",
"fields": {
"components": [
{
"self": "<>",
"id": "1",
"name": "<>",
"description": "<>"
}
]
}
},
{
"expand": "<>",
"id": "<>",
"self": "<>",
"key": "<>",
"fields": {
"components": [
{
"self": "<>",
"id": "<>",
"name": "<>"
}
]
}
},
我想返回一个包含两个“组件”名称的列表,我尝试过使用:
list((item['fields']['components']['name']) for item in data['issues'])
但是当我尝试Print() 上面的代码行时,我得到一个类型错误,说TypeError: list indices must be integers or slices, not str
另外,如果我能解释一下这种类型错误的含义,以及“list”试图做什么,这意味着它不是一个值得赞赏的“str”
编辑:
url = '<url>'
r = http.request('GET', url, headers=headers)
data = json.loads(r.data.decode('utf-8'))
print([d['name'] for d in item['fields']['components']] for item in data['issues'])
【问题讨论】:
-
item['fields']['components']是一个列表。你把它当作一本字典。 -
只是为了澄清,为什么这是通过添加 list() 的字典?从
list((item['fields']['components']['name']) for item in data['issues'])返回的数据被“ [ ] ”包围,并且通过阅读它,它表示这将被视为一个列表 -
item['fields']['components']的值是一个列表:[{"self": "<>", "id": "<>", "name": "<>"}]。该列表的第一个元素是另一个字典,您可以在其中访问name。所以访问该名称的正确方法是:item['fields']['components'][0]['name']-- 我希望这会有所帮助!