No JSON object could be decoded when opening stackexchange api as json
我正在访问一个特定的URL来获取JSON文件(来自stackexchange和stackoverflow api)。 执行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | import urllib2 import json url ="http://api.stackexchange.com/2.1/tags?order=desc&sort=popular&site=quant&pagesize=100&page=1" data = json.loads(urllib2.urlopen(url).read()) <ipython-input-20-7540e91a8ff2> in <module>() ----> 1 data = json.loads(urllib2.urlopen(url).read()) /usr/lib/python2.7/json/__init__.pyc in loads(s, encoding, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw) 336 parse_int is None and parse_float is None and 337 parse_constant is None and object_pairs_hook is None and not kw): --> 338 return _default_decoder.decode(s) 339 if cls is None: 340 cls = JSONDecoder /usr/lib/python2.7/json/decoder.pyc in decode(self, s, _w) 363 364 """ --> 365 obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 366 end = _w(s, end).end() 367 if end != len(s): /usr/lib/python2.7/json/decoder.pyc in raw_decode(self, s, idx) 381 obj, end = self.scan_once(s, idx) 382 except StopIteration: --> 383 raise ValueError("No JSON object could be decoded") 384 return obj, end ValueError: No JSON object could be decoded |
另一方面,twitter api一切正常......为什么?
正如@Thomas所说,这是因为gzip压缩。
我建议使用请求库,担心这种东西:
1 2 3 4 | import requests data_url ="https://api.stackexchange.com/2.1/search?page=1&pagesize=10&order=desc&sort=activity&tagged=pandas&site=stackoverflow" data_json = requests.get(data_url).json() |
StackExchange API总是压缩它的响应,但Python不会自动解压缩它,所以json正在获取gzip压缩数据。
这个答案显示了如何使用gzip模块来处理响应。