Conversion du dictionnaire en JSON


348
r = {'is_claimed': 'True', 'rating': 3.5}
r = json.dumps(r)
file.write(str(r['rating']))

Je ne peux pas accéder à mes données dans le JSON. Qu'est-ce que je fais mal?

TypeError: string indices must be integers, not str

Réponses:


536

json.dumps()convertit un dictionnaire en strobjet, pas en json(dict)objet! Vous devez donc charger votre strdans un dictpour l'utiliser en utilisant la json.loads()méthode

Voir json.dumps()comme méthode de sauvegarde et json.loads()comme méthode de récupération.

Voici l'exemple de code qui pourrait vous aider à mieux le comprendre:

import json

r = {'is_claimed': 'True', 'rating': 3.5}
r = json.dumps(r)
loaded_r = json.loads(r)
loaded_r['rating'] #Output 3.5
type(r) #Output str
type(loaded_r) #Output dict

11
ne pensez-vous pas qu'il est un peu inefficace de charger le json dans une variable distincte loaded_r, étant donné que vous l'avez déjà fait r?
Tim

Salut! Je me rends compte que c'est une réponse très ancienne, mais j'espérais que vous pourriez éclaircir une chose. @TimCastelijns a mentionné qu'il est inefficace de recharger le json dans une nouvelle variable Load_r. Est-ce que le moyen efficace de le faire serait de simplement déclarer r = json.loads (r)?
SchrodingersStat

2
@SchrodingersStat Salut. Je ne pense pas que cela change beaucoup les performances. Vous pouvez vérifier en utilisant la fonction «timeit». Si vous voulez vraiment un chargement / vidage json rapide, vous pouvez utiliser la bibliothèque 'ujson'!
Iman Mirzadeh

14
Je soupçonne que @TimCastelijns a mal compris l'intention d'Imran. Le JSON est chargé dans une nouvelle variable non pas parce qu'il s'agit de nouvelles informations, mais pour montrer que les valeurs dans le nouveau dictionnaire, c'est-à-dire après le codage et le décodage JSON aller-retour, sont identiques.
dumbledad

43

json.dumps()renvoie la représentation sous forme de chaîne JSON du dict python. Voir les documents

Vous ne pouvez pas faire r['rating']parce que r est une chaîne, plus un dict

Peut-être que vous vouliez dire quelque chose comme

r = {'is_claimed': 'True', 'rating': 3.5}
json = json.dumps(r) # note i gave it a different name
file.write(str(r['rating']))

2

Pas besoin de le convertir en chaîne en utilisant json.dumps()

r = {'is_claimed': 'True', 'rating': 3.5}
file.write(r['is_claimed'])
file.write(str(r['rating']))

Vous pouvez obtenir les valeurs directement à partir de l'objet dict.


1

Définir r comme dictionnaire devrait faire l'affaire:

>>> r: dict = {'is_claimed': 'True', 'rating': 3.5}
>>> print(r['rating'])
3.5
>>> type(r)
<class 'dict'>
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.