我正在使用Python请求库流式处理url,并一直收到以下错误:
import json
import requests
s = requests.Session()
payload = {'limit': 0}
r = s.get('https://api.coinmarketcap.com/v1/ticker', params=payload, timeout=(connect_timeout, read_timeout), stream=True)
r.raise_for_status()
for raw_rsvp in r.iter_lines(decode_unicode=True):
if raw_rsvp:
rsvp = json.loads(raw_rsvp)
print(rsvp)
我知道它试图在数组中的对象完成之前读取json
,我该如何解决这个问题?在
正如您所说,您收到的是
JSONDecodeError
,因为b'['
和其他字符串不是有效的json
字符串。只要结果是一个JSON对象数组,就必须获取整个数组,才能将其转换为python对象。在因此,如果您必须使用流式请求(
stream=True
),唯一的方法是将输出读取到字符串缓冲区(或其他类型的缓冲区以存储临时数据),并在传输完成后将其转换为JSON obj(此示例和其他示例用python3
编写):另一种解决方法是从流中捕获每个JSON obj并将其转换为python obj,然后将它们逐个放入
^{pr2}$list
。但这有点奇怪而且很慢:注:非流式请求将更容易:
相关问题 更多 >
编程相关推荐