Python Requests.Get响应包括意外的值

时间:2017-04-04 21:46:48

标签: python json rest python-requests endpoint

我正在使用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:问题已解决。请参阅下面的答案。

3 个答案:

答案 0 :(得分:1)

您是否尝试过response.json()而不是response.text

答案 1 :(得分:0)

看起来你在那里有一些非常糟糕的json,你应该做的第一件事是:

&#13;
&#13;
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;
&#13;
&#13;

现在你有了近似值,你可以到处使用正则表达式并引用值,但你不应该这样做。因此,如果您控制字符串源,请先尝试引用值。

答案 2 :(得分:0)

问题已经解决。它似乎与Python的版本有关。我从使用v3.5.1切换到使用v2.7.13,这解决了问题。现在,JSON数据以单个字符串形式返回,而不添加十六进制数。