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

Nie mogę uzyskać dostępu do moich danych w jsonie. Co ja robię źle?Konwersja słownika na JSON w pytonie

TypeError: string indices must be integers, not str 

Odpowiedz

134

json.dumps() konwertuje słownik do obiektu str, a nie json (dict) obiektu! więc musisz wczytać str do dyktafonu, aby go użyć, używając metody json.loads() methodjako metody składowania i jako metody pobierania.

To jest przykładowy kod, który może pomóc w zrozumieniu go bardziej:

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

nie sądzisz, że to trochę nieefektywne załadować json powrotem do osobnego zmienna 'loaded_r', uważając cię już go w 'r'? –

+9

To był przykładowy kod, aby pokazać, jak działają razem! Chciałem wspomnieć o wszystkich szczegółach @TimCastelijns –

13

json.dumps() zwraca reprezentację ciąg JSON z dict Pythona. See the docs

Nie można zrobić r['rating'] ponieważ r jest ciągiem znaków, a nie dict już

Może chodziło o coś takiego

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

Nie trzeba konwertować na ciąg za pomocą 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 

musi być ciągiem, aby zapisać w pliku, ale wartość oceny jest zmienna, więc najpierw przekonwertuj na ciąg znaków, a następnie spróbuj. Działa to z nadzieją.