类型错误:发出 REST API 请求时,字符串索引必须是整数
Posted
技术标签:
【中文标题】类型错误:发出 REST API 请求时,字符串索引必须是整数【英文标题】:TypeError: string indices must be integers when making rest api request 【发布时间】:2021-09-26 07:28:17 【问题描述】:当我尝试解析一个 rest api 数据时,
它引发了TypeError
。
这是我的代码:
def get_contracts():
response_object = requests.get(
"https://testnet-api.phemex.com/md/orderbook?symbol=BTCUSD"
)
print(response_object.status_code)
for contract in response_object.json()["result"]["book"]:
print(contract["asks"])
get_contracts()
任何提示或解决方案都将受到欢迎。提前致谢。
编辑/更新:
由于某种原因,我无法选择上述格式的特定键,只有当我这样做时才有可能:
data = response_object.json()['result']['book']['asks']
print(data)
我将尝试解决我的代码。感谢所有帮助过的人。
【问题讨论】:
【参考方案1】:此代码审查可能会对您有所帮助:
import requests
url = "https://testnet-api.phemex.com/md/orderbook?symbol=BTCUSD"
response_object = requests.get(url)
data = response_object.json()
# Printing your data helps to inspect the structure
# print(data)
# This is the list you are looking for:
asks = data['result']['book']['asks']
for ask in asks:
print(ask)
【讨论】:
我试过你的方法,我得到错误 TypeError: list indices must be integers or slices, not str.【参考方案2】:您需要迭代询问,而不是预订。 您有一个嵌套字典,其中 asks 是一个嵌套列表。 如果您只需单击获得的链接,或打印出您的 response_object.json(),您就会看到结构。
for foo in response_object.json()['result']['book']['asks']:
print(foo)
虽然通常最好将你的 response_object 分配给一个变量。
data = response_object.json()
for foo in data['result']['book']['asks']:
print(foo)
【讨论】:
我得到“类型错误:列表索引必须是整数或切片,而不是 str”如果我输入了太多这样的键 你想得到什么?只有asks and bids
在result > book
中。所有其他键都有单个字符串或整数值,无需迭代即可直接访问【参考方案3】:
看起来您正在尝试访问不存在的东西,因此出现 KeyError。
我会调试,一个简单的打印,你作为答案得到的 JSON 对象,并确保你试图访问的密钥在那里。
【讨论】:
以上是关于类型错误:发出 REST API 请求时,字符串索引必须是整数的主要内容,如果未能解决你的问题,请参考以下文章
Rest Assured:发出请求返回错误“JSON输入文本既不应为null也不应为空”。
向 Azure Blob 存储发出 GET 请求时授权失败 [REST API][Azure Blob 存储]
在 REST API 的 HTTP/1.0 请求中省略 Accept */* 标头是不是是一个错误