为json URL获取“无JSON对象可以解码”

时间:2017-12-05 06:37:24

标签: python json

api在浏览器上返回json但是在python上解析时我得到了这个异常:No JSON object could be decoded。我使用了json.load()json.loads(),但都失败了。

以下是该代码。

def handler_timeout(self):
        try:
            data = json.load(
                urlopen(
                    'https://www.zebapi.com/api/v1/market/ticker/btc/inr'
                )
            )
            buy_price = data['buy']
            sell_price = data['sell']
            status_message = "Buy: ₹ " + "{:,}".format(buy_price) + "   Sell: ₹ " + "{:,}".format(sell_price)
            self.ind.set_label(status_message, "")
        except Exception, e:
            print str(e)
            self.ind.set_label("!", "")
        return True

以下是urlopen(URL)的输出:

<addinfourl at 140336849031752 whose fp = <socket._fileobject object at 0x7fa2bb6f1cd0>>

以下是urlopen(URL).read()的输出:

��`I�%&/m�{J�J��t�`$ؐ@�������iG#)�*��eVe]f@�흼��{����{����;�N'���?\fdl��J�ɞ!���?~|?"~�o���G��~��=J�vv��;#�x���}��e���?=�N�u�/�h��ًWɧ�U�^���Ã���;���}�'���Q��ct

1 个答案:

答案 0 :(得分:1)

网址的内容为gzip-encoded

>>> u = urllib.urlopen('https://www.zebapi.com/api/v1/market/ticker/btc/inr')
>>> info = u.info()
>>> info['Content-Encoding']
'gzip'

解压缩内容。

import gzip
import io
import json
import urllib

u = urllib.urlopen('https://www.zebapi.com/api/v1/market/ticker/btc/inr')
with io.BytesIO(u.read()) as f:
    gz = gzip.GzipFile(fileobj=f)
    print json.load(gz)

或使用requests which decode gzip automatically

import requests
print requests.get('https://www.zebapi.com/api/v1/market/ticker/btc/inr').json()