2017-04-04 59 views
-1

我正在使用requests.get命令從URL/REST端點檢索數據。數據應該是JSON格式。當我從瀏覽器訪問URL時,它具有您期望的格式,即[{"variable1":value,"variable2":value}]。但是,當我使用requests.get命令獲取數據時,返回的數據將被分解幷包含額外的值行,這些值可能是表示後續行上的字符數的十六進制數。以下是response.text返回的示例。Python請求獲取響應包含意外值

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:已解決的問題。請參閱下面的答案。

回答

1

你試過response.json()而不是response.text

+0

查看編輯到我原來​​的帖子。我認爲這個錯誤是由於從GET命令收到的響應不是JSON格式造成的。 – skyfx

+0

你可以用'response.iter_lines()'過濾出非json的東西嗎? – cullywest

+0

不幸的是,這個問題不僅僅是非json的東西,而是數據跨行分割的事實。我已更新了原始帖子中的示例以反映此情況。 – skyfx

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.

現在你有近似值,你可以去周圍玩正則表達式和引用值,但你不應該這樣做。所以如果你控制字符串源,首先嚐試引用值。

0

問題已解決。它似乎與Python的版本有關。我從使用v3.5.1切換到使用v2.7.13,這解決了問題。 JSON數據現在以單個字符串的形式返回,而不添加十六進制。