web-dev-qa-db-fra.com

étrange python, l'objet 'unicode' n'a pas d'attribut 'read'

Voici mon code et quelqu'un a-t-il des idées sur ce qui ne va pas? J'ouvre mon contenu JSON directement par navigateur et cela fonctionne,

data = requests.get('http://ws.audioscrobbler.com/2.0/?method=library.getartists&api_key=4c22bd45cf5aa6e408e02b3fc1bff690&user=joanofarctan&format=json').text
data = json.load(data)
print type(data)
return data

merci d'avance, Lin

13
Lin Ma

Cette erreur s'est produite car la data est une variable unicode/str, modifiez la deuxième ligne de votre code pour résoudre votre erreur:

data = json.loads(data)

json.load récupère un objet fichier à la première position du paramètre et appelle la méthode read.

Vous pouvez également appeler la méthode json de la réponse pour récupérer directement les données:

response = requests.get('http://ws.audioscrobbler.com/2.0/?method=library.getartists&api_key=4c22bd45cf5aa6e408e02b3fc1bff690&user=joanofarctan&format=json')
data = response.json()
35
M.javid

requests.get(…).text renvoie le contenu sous la forme d'une chaîne unique (unicode). La fonction json.load() nécessite cependant un argument de type fichier.

La solution est assez simple: utilisez simplement loads au lieu de load:

data = json.loads(data)

Une solution encore meilleure consiste à appeler simplement json() directement sur l'objet de réponse. N'utilisez donc pas .text Mais .json():

data = requests.get(…).json()

Bien que cela utilise json.loads Lui-même en interne, il masque les détails de l'implémentation, vous pouvez donc vous concentrer uniquement sur l'obtention de la réponse JSON.

3
poke