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 の代わりに requests使用してみてください。

`# -*- 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 (No Content) を取得した場合、または応答に無効な JSON が含まれている場合、試行するとr.jsonが発生しValueError: No JSON object could be decodedます。

したがって、返されるステータスコードの種類を確認r.status_codeし、2番目のコメントに基づいてUTF問題があります.

于 2016-01-21T19:58:58.947 に答える