我正在使用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,意味着后续行有8,192个字符。请注意,在上面的示例中,我故意将行缩短为不显示8,192个字符:)。
毋庸置疑,这不符合JSON格式,因此我无法按预期处理它。有关为什么会发生这种情况的任何想法?我的猜测是它可能与收到的响应大小有关 - len(response.content)
表示它的大小为335,898字节 - 所以我尝试按照here描述的那样对响应进行分块,但是没有影响response.text
的输出。欣赏人们可以分享的任何想法:)
EDIT1:正在运行print(response.json())
会产生以下错误:
Traceback (most recent call last):
File "IncomingMessagesCompanyIDEvent.py", line 105, in <module>
data = getData()
File "IncomingMessagesCompanyIDEvent.py", line 65, in getData
text_file.write(response.json())
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python35\lib\site-packages\requests\models.py", line 858, in json
self.content.decode(encoding), **kwargs
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python35\lib\json\__init__.py", line 319, in loads
return _default_decoder.decode(s)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python35\lib\json\decoder.py", line 342, in decode
raise JSONDecodeError("Extra data", s, end)
json.decoder.JSONDecodeError: Extra data: line 2 column 1 (char 6)
EDIT2:问题已解决。请参阅下面的答案。
答案 0 :(得分:1)
您是否尝试过response.json()
而不是response.text
?
答案 1 :(得分:0)
看起来你在那里有一些非常糟糕的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.
&#13;
现在你有了近似值,你可以到处使用正则表达式并引用值,但你不应该这样做。因此,如果您控制字符串源,请先尝试引用值。
答案 2 :(得分:0)
问题已经解决。它似乎与Python的版本有关。我从使用v3.5.1切换到使用v2.7.13,这解决了问题。现在,JSON数据以单个字符串形式返回,而不添加十六进制数。