我使用requests.get
命令从URL/REST端点检索数据。数据应该是JSON格式的。当我从浏览器访问URL时,它具有您期望的格式,即[{"variable1":value,"variable2":value}]
。但是,当我使用requests.get
命令获取数据时,返回的数据将被分解并包含额外的值行,这些值看起来像是十六进制,表示后续行中的字符数。下面是response.text
返回内容的示例。在
2000
[{"variable1":v
2000
alue,"variable2
1ecd
":value}]
0
2000 base 16=8192 base 10,表示后续行有8192个字符。请注意,在上面的示例中,我特意缩短了行以不显示8192个字符:)。在
不用说,这不符合JSON格式,因此我无法按预期处理它。你有没有想过为什么会发生这种情况?我的猜测是,它可能与接收到的响应的大小有关-len(response.content)
表示它的大小是335898字节-所以我尝试按here的方式分块响应,但这并没有影响response.text
的输出。欣赏人们可以分享的任何想法:)
EDIT1:运行print(response.json())
会产生以下错误:
^{pr2}$
编辑2:问题已解决。请看下面我的答案。在
Tags:
你试过
response.json()
而不是response.text
?在看起来这里有一些格式非常糟糕的json,首先应该做的是:
import re response = response.text #filter out the newlines from literal response = re.sub('\n','',response) filtered_response = re.search('\[.*\]',response).group(0) #We still have a bad json string - '[{"variable1":v 2000 alue,"variable2 1ecd ":value}]', values should be quoted not only keys.
;现在您已经有了近似值,您可以到处玩regex并引用这些值,但您不必这样做。因此,如果控制字符串源,请尝试先引用值。在
问题已经解决了。它似乎与Python版本有关。我从v3.5.1改为使用v2.7.13,解决了这个问题。JSON数据现在返回为一个字符串,不添加十六进制。在