Konversi kamus ke JSON


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

Saya tidak dapat mengakses data saya di JSON. Apa yang saya lakukan salah?

TypeError: string indices must be integers, not str

Jawaban:


536

json.dumps()mengonversi kamus ke strobjek, bukan json(dict)objek! Jadi, Anda harus memuat strke dalam dictuntuk menggunakannya dengan menggunakan json.loads()metode

Lihat json.dumps()sebagai metode penyimpanan dan json.loads()sebagai metode pengambilan.

Ini adalah contoh kode yang dapat membantu Anda lebih memahaminya:

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
tidakkah Anda pikir itu agak tidak efisien untuk memuat json kembali ke variabel yang terpisah loaded_r, mengingat Anda sudah memilikinya r?
Tim

Hai! Saya menyadari ini adalah jawaban yang sangat lama, tetapi saya berharap Anda dapat menghapus satu hal. @TimCastelijns menyebutkan bahwa tidak efisien untuk memuat json kembali ke variabel baru loaded_r. Apakah cara yang efisien untuk melakukan ini adalah dengan hanya menyatakan r = json.loads (r)?
SchrodingersStat

2
@SchrodingersStat Hai. Saya tidak berpikir ini banyak mengubah kinerja. Anda dapat memeriksa menggunakan fungsi 'timeit'. Jika Anda benar-benar menginginkan json load / dump yang cepat, Anda dapat menggunakan perpustakaan 'ujson'!
Iman Mirzadeh

14
Saya curiga @TimCastelijns telah salah mengerti maksud Imran. JSON dimuat ke variabel baru bukan karena itu adalah informasi baru, tetapi untuk menunjukkan bahwa nilai-nilai dalam kamus baru, yaitu setelah JSON menyandikan dan mendekode pulang-pergi, adalah identik.
Dumbledad

43

json.dumps()mengembalikan representasi string JSON dari dict python. Lihat dokumen

Anda tidak dapat melakukannya r['rating']karena r adalah string, bukan dict lagi

Mungkin maksudmu seperti itu

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

2

Tidak perlu mengonversinya menjadi string dengan menggunakan json.dumps()

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

Anda bisa mendapatkan nilai langsung dari objek dict.


0

Mendefinisikan r sebagai kamus harus melakukan trik:

>>> r: dict = {'is_claimed': 'True', 'rating': 3.5}
>>> print(r['rating'])
3.5
>>> type(r)
<class 'dict'>
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.