有人可以告诉我我在做什么错吗?我正在收到此错误。 经历了类似错误的早期帖子。无法理解。.
import json
import re
import requests
import subprocess
res = requests.get('https://api.tempura1.com/api/1.0/recipes', auth=('12345','123'), headers={'App-Key': 'some key'})
data = res.text
extracted_recipes = []
for recipe in data['recipes']:
extracted_recipes.append({
'name': recipe['name'],
'status': recipe['status']
})
print extracted_recipes
TypeError:字符串索引必须为整数
数据包含以下内容
{
"recipes": {
"47635": {
"name": "Desitnation Search",
"status": "SUCCESSFUL",
"kitchen": "eu",
"active": "YES",
"created_at": 1501672231,
"interval": 5,
"use_legacy_notifications": false
},
"65568": {
"name": "Validation",
"status": "SUCCESSFUL",
"kitchen": "us-west",
"active": "YES",
"created_at": 1522583593,
"interval": 5,
"use_legacy_notifications": false
},
"47437": {
"name": "Gateday",
"status": "SUCCESSFUL",
"kitchen": "us-west",
"active": "YES",
"created_at": 1501411588,
"interval": 10,
"use_legacy_notifications": false
}
},
"counts": {
"total": 3,
"limited": 3,
"filtered": 3
}
}
答案 0 :(得分:1)
您没有将文本转换为json。试试
data = json.loads(res.text)
或
data = res.json()
除此之外,您可能需要更改for循环以遍历值而不是键。将其更改为以下内容
for recipe in data['recipes'].values()
答案 1 :(得分:0)
您的代码有两个问题,您可以通过进行最少的调试来自己发现。
第一个问题是您没有将响应内容从json解析到本地Python对象。在这里:
data = res.text
data
是一个字符串(json格式,但仍然是一个字符串)。您需要对其进行解析以将其转换为python表示形式(在这种情况下为dict)。您可以使用stdlib的json.loads()
(一般解决方案)来完成此操作,或者由于您正在使用python-requests,只需调用Response.json()
方法即可:
data = res.json()
那么你有这个:
for recipe in data['recipes']:
# ...
现在我们已经将data
变成了正确的dict
,我们可以访问data['recipes']
的下标,但是直接在dict
上进行迭代实际上是遍历键,而不是值,因此在上面的for
循环recipe
中将是一个字符串(“ 47635”,“ 65568”等)。如果要遍历值,则必须明确要求它:
for recipe in data['recipes'].values():
# now `recipe` is the dict you expected