Sözlüğü JSON'a dönüştürme


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

JSON'daki verilerime erişemiyorum. Neyi yanlış yapıyorum?

TypeError: string indices must be integers, not str

Yanıtlar:


536

json.dumps()sözlüğü strbir json(dict)nesneye değil, nesneye dönüştürür! Eğer yüklemek zorunda Yani senin strbir içine dictkullanarak kullanmak json.loads()yöntemini

Bkz json.dumps()kaydetme yöntemi ve bir şekilde json.loads()bir geri yöntem olarak.

Bu, daha fazla anlamanıza yardımcı olabilecek kod örneğidir:

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
json'u loaded_rzaten içinde bulunduğunuzu düşünerek ayrı bir değişkene geri yüklemenin biraz verimsiz olduğunu düşünmüyor rmusunuz?
Tim

Selam! Bunun çok eski bir cevap olduğunun farkındayım, ama bir şeyi temizleyebileceğini umuyordum. @TimCastelijns, json'u yeni bir loaded_r değişkenine geri yüklemenin yetersiz olduğunu belirtti. Bunu yapmanın etkili yolu sadece r = json.loads (r) durumunu belirtmek mi?
SchrodingersStat

2
@SchrodingersStat Merhaba. Bunun performansı çok değiştirdiğini sanmıyorum. 'Timeit' işlevini kullanarak kontrol edebilirsiniz. Gerçekten hızlı bir json yükleme / boşaltma istiyorsanız, 'ujson' kütüphanesini kullanabilirsiniz!
Iman Mirzadeh

14
@TimCastelijns'in İmran'ın niyetini yanlış anladığından şüpheleniyorum. JSON, yeni bilgi olduğu için değil, yeni sözlükteki değerlerin, yani JSON kodlaması ve gidiş dönüşünün kodunun çözülmesinden sonra aynı olduğunu göstermek için yeni bir değişkene yüklenir.
dumbledad

43

json.dumps()python dict'in JSON dizesi temsilini döndürür. Dokümanlara bakın

Sen yapamaz r['rating']r artık bir dize değil, bir dict çünkü

Belki de böyle bir şey demek istedin

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

2

Kullanarak bir dizede dönüştürmeye gerek yok json.dumps()

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

Değerleri doğrudan dict nesnesinden alabilirsiniz.


1

R'yi sözlük olarak tanımlamak hile yapmalıdır:

>>> r: dict = {'is_claimed': 'True', 'rating': 3.5}
>>> print(r['rating'])
3.5
>>> type(r)
<class 'dict'>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.