2017-01-27 50 views
1

我試着去得到一個漂亮的JSON,但總是有相同的錯誤expected string or buffer我的代碼如下錯誤獲取JSON使用oauthlib蟒蛇

 import urllib2 
     import json 
     import logging 
     from libs.requests_oauthlib import OAuth1Session 
     import libs.requests2 

     coke = OAuth1Session('user_key', 
          client_secret='user_secret', 
          resource_owner_key='key', 
          resource_owner_secret='key_secret') 

     headers = {'content-type': 'application/json'} 
     url = "http://test.hdp.pengostores.mx/api/rest/orders" 


     response = coke.get(url,headers=headers) 
     self.response.out.write(response.text) 

我的日誌:

<type 'exceptions.Exception'> (/base/data/home/apps/s~precise-line-76299minutos/devvic.398776853921596377/delivery/handlers.py:5278) 
Traceback (most recent call last): 
    File "/base/data/home/apps/s~precise-line-76299minutos/devvic.398776853921596377/delivery/handlers.py", line 5274, in get 
    response = json.loads(coke.get(url,headers=headers)) 
    File "/base/data/home/runtimes/python27/python27_dist/lib/python2.7/json/__init__.py", line 338, in loads 
    return _default_decoder.decode(s) 
    File "/base/data/home/runtimes/python27/python27_dist/lib/python2.7/json/decoder.py", line 365, in decode 
    obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 
TypeError: expected string or buffer 
+0

不要使用截圖 - 現在我無法複製粘貼文本以向您顯示問題出在哪裏。 – furas

+0

在錯誤信息中有'json.loads(coke.get())',但我在代碼中沒有看到。你把錯誤的代碼。 – furas

+0

是的,對不起,我把其他的日誌,因爲我嘗試不同的方式來打印json – victor

回答

2

在錯誤消息,您使用

json.loads(coke.get(...)) 

get()返回response對象 - 你必須使用get().textget().content(而不是get())來獲取文本或字節。

或者嘗試

data = coke.get(...).json() 

獲得直接JSON轉換爲Python數據。


編輯:使用json.dumps()

到相當的打印Python數據使用pprint.pprint(data)或轉換Python數據以JSON字符串從DOC見例如:https://docs.python.org/2/library/json.html

Pretty printing: 

>>> import json 
>>> print json.dumps({'4': 5, '6': 7}, sort_keys=True, 
...     indent=4, separators=(',', ': ')) 
{ 
    "4": 5, 
    "6": 7 
} 
+0

好吧,現在打印JSON,但打印內聯不縮進/漂亮 – victor

+1

你可以使用'pprint.pprint(data)'漂亮地打印Python數據或你可以使用'json.dumps()'而不是'json.loads()'將Python數據轉換爲JSON文本 - 參見doc:https://docs.python.org/2/library/json.html – furas