Разрешить объекту JSON принимать байты или позволить urlopen output strings

В 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 , чтобы указать кодировку?

176
задан N4v 3 December 2018 в 18:33
поделиться

1 ответ

С 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)
0
ответ дан 23 November 2019 в 20:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: