2017-01-27 49 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