В Python 3 я запрашиваю документ json по URL.
response = urllib.request.urlopen(request)
Объект ответа
представляет собой объект, подобный файлу, с read
и readline
методы. Обычно объект JSON может быть создан с файлом, открытым в текстовом режиме.
obj = json.load(fp)
Я бы хотел сделать следующее:
obj = json.load(response)
Это, однако, не работает, поскольку urlopen возвращает файловый объект в двоичном режиме.
Решение проблемы. конечно:
str_response = response.read().decode('utf-8')
obj = json.loads(str_response)
, но это плохо ...
Есть ли лучший способ преобразовать объект байтового файла в объект строкового файла? Или мне не хватает каких-либо параметров для urlopen
или json.load
, чтобы указать кодировку?
С Python 3.6 можно использовать json.loads()
для десериализации bytes
объект непосредственно (кодирование должно быть UTF-8, UTF-16 или UTF-32). Так, с помощью только модули из стандартной библиотеки, можно сделать:
import json
from urllib import request
response = request.urlopen(url).read()
data = json.loads(response)