Proyek saya saat ini menerima pesan JSON dengan python yang saya perlukan untuk mendapatkan bit informasi. Untuk keperluan ini, mari kita atur ke beberapa JSON sederhana dalam sebuah string:
jsonStr = '{"one" : "1", "two" : "2", "three" : "3"}'
Sejauh ini saya telah menghasilkan permintaan JSON menggunakan daftar dan kemudian json.dumps
, tetapi untuk melakukan yang sebaliknya saya pikir saya perlu menggunakannya json.loads
. Namun saya belum beruntung dengan itu. Adakah yang bisa memberi saya potongan yang akan kembali "2"
dengan input "two"
pada contoh di atas?
'
pembatas string kutipan tunggal, Anda mungkin secara tidak sengaja membuat representasi string untuk kamus Python. JSON akan selalu menggunakan"
pembatas . Jika demikian, perbaiki kode Anda yang menghasilkan keluaran untuk digunakanjson.dumps()
sebagai penggantistr()
ataurepr()
, dan menuju ke Konversi representasi String dari Kamus ke kamus? untuk mengetahui cara memulihkan data Python Anda. Petunjuk lain Anda memiliki Python literal? CariNone
,True
atauFalse
, JSON akan menggunakannull
,true
&false
.'
pembatas string kutipan tunggal), juga dapat melihatnya di sini: stackoverflow.com/questions/41168558/…Jawaban:
Sangat sederhana:
sumber
import simplejson as json
. Lupa menyebutkan tetapi terima kasih :).load
metode alih-alih.loads
Terkadang json Anda bukan string. Misalnya jika Anda mendapatkan json dari url seperti ini:
Anda harus menggunakan json.load, bukan json.loads:
(mudah untuk dilupakan: 'untuk' string ')
sumber
Untuk URL atau file, gunakan
json.load()
. Untuk string dengan konten .json, gunakanjson.loads()
.sumber
Berikut ini adalah contoh sederhana yang dapat membantu Anda:
Output untuk kode di atas adalah:
Perhatikan bahwa Anda dapat mengatur argumen ident dump untuk mencetaknya seperti itu (misalnya, ketika menggunakan print json.dumps (data, indent = 4)):
sumber
Dapat menggunakan modul json atau ast python:
sumber
ast.literal_eval()
fungsi untuk JSON, karena di luar contoh sepele teks dan integer Anda, Anda akan mengalami masalah. JSON bukan Python . Hanya karena beberapa JSON dapat diuraikan denganast.literal_eval()
tidak membuat pendekatan yang tepat.r'{"foo": null, "bar": true, "baz": "\ud83e\udd26"}'
menggunakanast.literal_eval()
, karena mengandung nulls, nilai boolean, dan satu titik kode non-BMP. JSON mewakili nilai-nilai itu secara berbeda dari bagaimana literal Python akan mewakili nilai-nilai itu.json.loads()
di sisi lain, tidak memiliki masalah dengan masukan itu dan benar decode itu untuk{'foo': None, 'bar': True, 'baz': '🤦'}
.ast.literal_eval()
sedikit lebih lambat dan tidak dapat dikustomisasi. Anda tidak boleh menggunakannya untuk mendekode JSON .