2014-11-04 15 views
78
r = {'is_claimed': 'True', 'rating': 3.5} 
r = json.dumps(r) 
file.write(str(r['rating'])) 

Non riesco ad accedere ai miei dati in the json. Che cosa sto facendo di sbagliato?Conversione del dizionario in JSON in python

TypeError: string indices must be integers, not str 

risposta

134

json.dumps() converte un dizionario in oggetto str, non in un oggetto json (dict)! quindi devi caricare il tuo str in un dict per usarlo usando il metodo json.loads()

Vedere json.dumps() come metodo di salvataggio e json.loads() come metodo di recupero.

Questo è il codice di esempio che può aiutare a capire più:

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 
+0

Non credi che sia un po 'inefficiente per caricare il JSON di nuovo in un separato variabile 'loaded_r', si considera già l'aveva in 'r'? –

+9

Questo era un codice di esempio per mostrare come funzionano le cose insieme! Volevo citare tutti i dettagli @TimCastelijns –

13

json.dumps() restituisce la rappresentazione di stringa JSON del dict pitone. See the docs

Non si può fare r['rating'] perché r è una stringa, non un dict più

Forse volevi dire qualcosa come

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

Non c'è bisogno di convertire in stringa utilizzando json.dumps()

>>> f = open("t.txt",'w') 
>>> r = {'is_claimed': 'True', 'rating': 3.5} 
>>> f.write(r['is_claimed']) 
>>> f.write(r['rating']) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: expected a character buffer object 

deve essere una stringa da scrivere nel file, ma il valore della valutazione è float quindi prima convertirlo in stringa, quindi provarlo. Funziona speranzosamente.

Problemi correlati