Saya memiliki banyak data JSON dari pos-pos Facebook seperti di bawah ini:
{"from": {"id": "8", "name": "Mary Pinter"}, "message": "How ARE you?", "comments": {"count": 0}, "updated_time": "2012-05-01", "created_time": "2012-05-01", "to": {"data": [{"id": "1543", "name": "Honey Pinter"}]}, "type": "status", "id": "id_7"}
Data JSON bersifat semi-terstruktur dan semuanya tidak sama. Di bawah ini adalah kode saya:
import json
str = '{"from": {"id": "8", "name": "Mary Pinter"}, "message": "How ARE you?", "comments": {"count": 0}, "updated_time": "2012-05-01", "created_time": "2012-05-01", "to": {"data": [{"id": "1543", "name": "Honey Pinter"}]}, "type": "status", "id": "id_7"}'
data = json.loads(str)
post_id = data['id']
post_type = data['type']
print(post_id)
print(post_type)
created_time = data['created_time']
updated_time = data['updated_time']
print(created_time)
print(updated_time)
if data.get('application'):
app_id = data['application'].get('id', 0)
print(app_id)
else:
print('null')
#if data.get('to'):
#... This is the part I am not sure how to do
# Since it is in the form "to": {"data":[{"id":...}]}
Saya ingin kode untuk mencetak to_id sebagai 1543 lagi cetak 'nol'
Saya tidak yakin bagaimana melakukan ini.
in
memeriksa danraise
jika mereka hilang? Akses saja tanpa memeriksa, dan Anda akan mendapatkan perilaku yang persis sama (kecuali denganKeyError
bukannya aValueError
).Jika semua yang Anda inginkan adalah untuk memeriksa apakah kunci ada atau tidak
Jika Anda ingin memeriksa apakah ada nilai untuk kunci
Kembalikan nilai default jika nilai aktual tidak ada
sumber
Ini adalah praktik yang baik untuk membuat metode utilitas pembantu untuk hal-hal seperti itu sehingga setiap kali Anda perlu mengubah logika validasi atribut, itu akan berada di satu tempat, dan kode tersebut akan lebih mudah dibaca oleh pengikut.
Misalnya membuat metode pembantu (atau kelas
JsonUtils
dengan metode statis) dijson_utils.py
:dan kemudian menggunakannya dalam proyek Anda:
CATATAN PENTING:
Ada alasan mengapa saya menggunakan
data.get(attribute) or default_value
bukan hanyadata.get(attribute, default_value)
:Dalam aplikasi saya mendapatkan atribut dengan nilai 'null' sama dengan tidak mendapatkan atribut sama sekali. Jika penggunaan Anda berbeda, Anda perlu mengubahnya.
sumber
Cobalah:
Atau, jika Anda hanya ingin melewatkan nilai id yang hilang alih-alih mencetak
'null'
:Begitu:
Tentu saja dalam kehidupan nyata, Anda mungkin tidak ingin
print
setiap id, tetapi untuk menyimpannya dan melakukan sesuatu dengan mereka, tapi itu masalah lain.sumber
sumber
Saya menulis fungsi kecil untuk tujuan ini. Merasa bebas untuk digunakan kembali,
sumber