#34 JSON
Internetdagi eng mashxur format bilan tanishamiz
JSON NIMA?
JSON (JavaScript Object Notation) bugungi kunda ma'lumotlarni saqlash va internet orqali uzatish uchun qo'llaniladigan eng mashxur format hisoblanadi. Dastavval JavaScript tili uchun yaratilgan bu format, bugungi kunda deyarli barcha dasturlash tillari tomonidan ishlatiladi. Qolaversa, JSON formatidagi fayllarining tarkibini oddiy matn muharriri yordamida koʻrish va tahrirlash mumkin.
Aksar holatlarda dastur va server orasidagi maʻlumotlar aynan JSON koʻrinishida uzatiladi. Quyidagi rasmda Wikipedia sahifasidan olingan maʻlumot ham JSON formatida berilgan:
Yuqoridagi misolda maʻlumotlar Pythondagi lug'atlar kabi kalit soʻz va qiymat koʻrinishida saqlangan. Lekin, JSON yordamida biz nafaqat lug'at, balki boshqa turdagi ma'lumotlarni ham saqlashimiz mumkin. Bunda Pythondagi ma'lumot turlari, quyidagi jadval asosida, JavaScript ma'lumot turlariga konvertasiya qilinadi:
Python | JavaScript |
dict | Object |
list | Array |
tuple | Array |
str | String |
int | Number |
float | Number |
True | true |
False | false |
None | null |
Demak, dasturimiz davomida maʻlumotlarni JSON ko'rinishida saqlashimiz, internet orqali boshqa foydalanuvchilarga, dasturlarga yoki serverga yuborishimiz, JSON fayllarni Pythonda ochib, unga ishlov berishimiz va turli amallar bajarishimiz mumkin.
JSON o'zgaruvchilar, tarkibidan qat'iy nazar matn ko'rinishida saqlanadi.
PYTHONDAN JSONGA
JSON maʻlumotlar va fayllar bilan ishlash uchun Pythonda maxsus json
moduli bor. Demak, dasturimiz boshida biz bu modulni yuklab olishimiz kerak boʻladi (import json
).
Ma'lumotlarni JSON matniga o'tkazish uchun ikki funksiyadan foydalanamiz:
json.dumps(x)
— berilganx
o'zgaruvchini JSON matniga o'zgartiradijson.dump(x,fayl)
— berilganx
o'zgaruvchini JSON ga o'zgartirib, ko'rsatilganfayl
ga saqlaydi.
json.dumps()
json.dumps()
Ma'lumotlarni JSON formatiga o'tkazish uchun json.dumps()
funksiyasidan foydalanamiz:
JSON ma'lumotlar matn ko'rinishida saqlanadi.
Natija: str
Yuqoridagi aytganimizdek, ko'p holatlarda JSON ma'lumotlar lug'at ko'rinishda uzatiladi.
print()
funksiyasi yordamida JSON tarkibini ko'rishimiz mumkin:
Natija: {"ism": "Alijon Valiyev", "yosh": 30, "oila": true, "farzandlar": ["Ahmad", "Bonu"], "allergiya": null, "dorilar": [{"nomi": "Analgin", "miqdori": 0.5}, {"nomi": "Panadol", "miqdori": 1.2}]}
Yuqoridagi natija o'qish uchun noqulay ko'rinishda chiqdi. Buni to'g'rilash uchun dumps()
funksiyasiga qo'shimcha indent=4
parametrini beramiz. Bu parametr ma'umotlarni saqlashda chapdan qancha joy tashlashni ko'rsatadi:
Natija:
Ko'rib turganingizdek, natija o'qishga qulay ko'rinishda chiqdi.
Mavzu boshida, JSON ichidagi ma'lumotlar JavaScript ma'lumot turlariga konvertasiya qilinadi dedik. Buni yuqoridagi misolda ham ko'rishimiz mumkin (farzandlar
, oila
, allergiya
kalitlari qiymatini asl lug'at bilan solishtiring).
json.dump()
json.dump()
Ma'lumotlarni JSON formatiga o'tkazish va faylga yozish uchun json.dump()
funksiyasini chaqriamiz. Funksiya parametri sifatida o'zgaruvchi va fayl nomlarini ko'rsatamiz. Albatta buning uchun avval faylni yozish uchun ochgan bo'lishimiz kerak:
JSON fayl tarkibini istalgan matn muharrirda ochib ko'rishimiz mumkin:
JSONDAN PYTHONGA
JSON formatidagi ma'lumotlarni Pythondagi ma'lumot turiga keltirish uchun json.loads()
yoki json.load()
funksiyalaridan foydalanamiz. Yuqoridagi ka'bi, json.loads()
funksiyasi to'g'ridan-to'g'ri JSON matn bilan ishlasa, json.load()
funksiyasi JSON fayllarni o'qish uchun ishlatiladi.
json.loads()
json.loads()
Bu funksiya parametr sifatida JSON matn qabul qiladi va Python o'zgaruvchiga o'tkazadi.
Natija:
{'ism': 'Alijon Valiyev', 'yosh': 30, 'oila': True, 'farzandlar': ['Ahmad', 'Bonu'], 'allergiya': None, 'dorilar': [{'nomi': 'Analgin', 'miqdori': 0.5}, {'nomi': 'Panadol', 'miqdori': 1.2}]}
E'tibor qiling, oila
va allergiya
kalitlarining qiymati qaytadan Python ma'lumot turlariga qaytdi.
json.load()
json.load()
Bu funksiya JSON fayllarning tarkibini Pythonga yuklab olish uchun ishlatiladi.
Natija: <class 'dict'>
JSON BILAN ISHLASH
Ko'pincha internet orqali JSON fayllarni qabul qilganimizda ma'lumotlar bir necha qavatli lug'at ko'rinishida bo'ladi. JSON matnidan aynan o'zimizga kerakli ma'lumotni ajratib olish uchun lug'atni biroz tahlil qilish, uning kalitlari va qiymatlarini topish talab qilinishi mumkin. Bu ayniqsa juda uzun JSON fayllarga tegishli. Shuning uchun JSON bilan samarali ishlash uchun lug'atlar bilan ishlashni yana bir bor takrorlab oling.
Quyidagi misolda Google Maps hizmati qaytargan JSON matni lug'at ko'rinishida berilgan. Bu Toshkent shahridagi Olmazor tumanining Geografik manzili.
Keling shu ma'lumotlar orasidan tumanning geografik koordinatalrini topamiz. Avvalo, lug'atga ko'z yugurtirib chiqib, bizga kerak ma'lumotlar quyidagi ko'rinishda berilganini ko'rishimiz mumkin:
Bizga aynan latitude (kenglik) va longitude (uzunlik) qiymatlari kerak. Ular esa "location" kaliti ichidagi lug'atda lat va lng kalitlariga tegishli qiymatlarda joylashgan. location kalitining o'zi ham geometry kaliti ichida joylashganini ko'rishimiz mumkin.
Demak, lu'gat ichidan lat va lng qiymatlarini olish uchun quyidagi kodni yozamiz:
Natija: 41.3645355,69.2281531
Koordinatalarni Google Mapsga kiritib ko'ramiz va quyidagi natijani olamiz.
AMALIYOT
Ushbu o'zgaruvchini JSON ko'rinishida saqlang va JSON matnini konsolga chiqaring:
data = {"Model" : "Malibu", "Rang" : "Qora", "Yil":2020, "Narh":40000}
Ushbu JSON matnni ko'chirib oling, va talabaning ismi va familiyasini konsolga chiqaring:
talaba_json = """{"ism":"Hasan","familiya":"Husanov","tyil":2000}"""
Yuqoridagi ikki o'zgaruvchini alohida JSON fayllarga saqlang.
Quyidagi JSON faylni yuklab oling. Faylda 3 ta talabaning ism va familiyasi saqlangan. Ularning har birini alohida qatordan
"Ism Familiya, n-kurs, Fakultet talabasi"
ko'rinishida konsolga chiqaring.
Quyidagi bog'lamaga kirsangiz, Wikipediadagi Python dasturlash tili haqidagi maqolani JSON ko'rinishida ko'rishingiz mumkin. Brauzerda chiqqan ma'lumotni JSON ko'rinishida saqlang (brauzerda Ctrl+S tugmasini bosib). Faylni Pythonda oching va konsolga maqolaning sarlavhasi (title) va qisqa matnini (extract) chiqaring: https://uz.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&exintro&explaintext&redirects=1&titles=Python
JAVOBLAR
Last updated