web-dev-qa-db-fra.com

Conversion de dictionnaire en JSON

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
252
sheetal_158

json.dumps() convertit un dictionnaire en objet str, pas en objet json (dict)! vous devez donc charger votre str dans un dict pour l'utiliser en utilisant la méthode json.loads()

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

Voici un exemple de code qui pourrait vous aider à mieux 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
398
Iman Mirzadeh

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

Vous ne pouvez pas faire r['rating'] parce que r est une chaîne, pas 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']))
34
Tim Castelijns

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.

2
user3273866

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'>
0
Aslan