183 votes

Laisser l'objet JSON accepter des octets ou laisser urlopen sortir des chaînes de caractères.

Avec Python 3, je demande un document json à partir d'une URL.

response = urllib.request.urlopen(request)

Le site response est un objet de type fichier avec read y readline méthodes. Normalement, un objet JSON peut être créé avec un fichier ouvert en mode texte.

obj = json.load(fp)

Ce que je voudrais faire, c'est :

obj = json.load(response)

Cependant, cela ne fonctionne pas car urlopen renvoie un objet fichier en mode binaire.

Il existe bien sûr une solution de contournement :

str_response = response.read().decode('utf-8')
obj = json.loads(str_response)

mais ça fait mal...

Existe-t-il un meilleur moyen de transformer un objet fichier d'octets en un objet fichier de chaîne de caractères ? Ou est-ce qu'il me manque des paramètres pour l'un ou l'autre urlopen o json.load pour donner un encodage ?

0voto

J'ai trouvé cette méthode simple pour transformer le contenu de HttpResponse en json.

import json

request = RequestFactory() # ignore this, this just like your request object

response = MyView.as_view()(request) # got response as HttpResponse object

response.render() # call this so we could call response.content after

json_response = json.loads(response.content.decode('utf-8'))

print(json_response) # {"your_json_key": "your json value"}

J'espère que cela vous aidera

-2voto

jayesh Points 79

J'ai utilisé le programme ci-dessous pour utiliser de json.loads()

import urllib.request
import json
endpoint = 'https://maps.googleapis.com/maps/api/directions/json?'
api_key = 'AIzaSyABbKiwfzv9vLBR_kCuhO7w13Kseu68lr0'
origin = input('where are you ?').replace(' ','+')
destination = input('where do u want to go').replace(' ','+')
nav_request = 'origin={}&destination={}&key={}'.format(origin,destination,api_key)
request = endpoint + nav_request
response = urllib.request.urlopen(request).read().decode('utf-8')
directions = json.loads(response)
print(directions)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X