0

我的代码非常简单。当我运行下面的代码时,我应该得到一个 JSON,当我将它url直接粘贴到浏览器中时可以看到,但是当我尝试使用 Python 时,我得到了错误

ValueError:无法解码任何 JSON 对象

import urllib2
import json

url = 'http://api.openweathermap.org/data/2.5/weather?q=London,uk&appid=2de143494c0b295cca9337e1e96b00e0'

json_obj = urllib2.urlopen(url)
data = json.load(json_obj) #THIS IS LINE 7, i.e. where the error occurs

这是我得到的完整错误:

Traceback (most recent call last):
File "<input>", line 1, in <module>
File "C:\Python27\lib\json\__init__.py", line 291, in load
  **kw)
File "C:\Python27\lib\json\__init__.py", line 339, in loads
return _default_decoder.decode(s)
File "C:\Python27\lib\json\decoder.py", line 364, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\Python27\lib\json\decoder.py", line 382, in raw_decode
raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
4

1 回答 1

0

尝试使用请求而不是 urllib。

`# -*- coding: utf-8 -*-

import requests

url = 'http://api.openweathermap.org/data/2.5/weather?q=London,uk&appid=2de143494c0b295cca9337e1e96b00e0'

r = requests.get(url)
print r.status_code
print r.json()
>>> {u'clouds': {u'all': 0}, u'name': u'London', u'coord': {u'lat': 51.51, u'lon': -0.13}, u'sys': {u'country': u'GB', u'sunset': 1453393861, u'message': 0.0089, u'type': 1, u'id': 509
1, u'sunrise': 1453362798}, u'weather': [{u'main': u'Clear', u'id': 800, u'icon': u'01n', u'description': u'Sky is Clear'}], u'cod': 200, u'base': u'cmc stations', u'dt': 145340535
4, u'main': {u'pressure': 1022, u'temp_min': 276.85, u'temp_max': 279.15, u'temp': 277.76, u'humidity': 70}, u'id': 2643743, u'wind': {u'speed': 3.6, u'deg': 150}}

从请求文档

如果 JSON 解码失败,r.json 会引发异常。例如,如果响应收到 204(无内容),或者如果响应包含无效 JSON,则尝试r.jsonraises ValueError: No JSON object could be decoded

因此,请检查您返回的状态代码类型,r.status_code并根据您的第二条评论存在UTF问题。

于 2016-01-21T19:58:58.947 回答