Mundarija (35)
- Bu darsda
- 1. Nega bu kerak?
- 2. Birinchi JSON
- 2.1 Obyekt — anketa
- 2.2 Massiv — ro'yxat
- 3. Oltita qiymat turi
- 3.1 Ichma-ich tuzilma
- 4. Qat'iy qoidalar
- 4.1 Faqat qo'shtirnoq
- 4.2 Oxirgi vergul yo'q
- 4.3 Vergul unutilmasin
- 4.4 Izoh yo'q
- 4.5 Bitta ildiz
- 5. jq bilan tekshirish va ishlash
- 5.1 Chiroyli qilish va tekshirish
- 5.2 Faqat tekshirish
- 5.3 Siqish
- 5.4 Qiymat olish
- 5.5 Boshqa usullar
- 6. JSON oilasi: JSONC, JSON5, NDJSON
- 6.1 JSONC — izohli JSON
- 6.2 JSON5 — odam uchun JSON
- 6.3 NDJSON — qatorma-qator JSON
- 7. Ko'p uchraydigan xatolar
- 7.1 Bittalik tirnoq
- 7.2 Izoh yoki qo'shtirnoqsiz kalit
- 7.3 Vergul yetishmaydi
- 7.4 Windows yo'li
- 7.5 Ko'rinmas BOM
- 8. Mashqlar
- 1-mashq (oson): Uchta xato
- 2-mashq (o'rta): O'zingiz yozing
- 3-mashq (qiyin): jq bilan savollar
- 9. Real ishda
- Xulosa
JSON nima: sintaksis qoidalari, 6 ta tur va tipik xatolar
Qisqacha: JSON (JavaScript Object Notation) — dasturlar bir-biriga ma'lumot yuboradigan matnli format. Unda faqat 6 turdagi qiymat bor: satr, son,
true/false,null, obyekt{}va massiv[]. Qoidalari qat'iy: kalit va satrlar faqat qo'shtirnoqda ("), oxirgi elementdan keyin vergul yo'q, izoh yozib bo'lmaydi. Bitta xato butun faylni o'qib bo'lmas qiladi — shuning uchun JSONjqkabi vosita bilan tekshiriladi.
Bu darsda
- JSON qaysi muammoni hal qilishini va qayerlarda uchrashini bilasiz.
- Obyekt, massiv va 6 ta qiymat turini tanib, JSON faylni o'qiy olasiz.
- O'zingiz to'g'ri JSON yozasiz va eng ko'p uchraydigan 6 ta xatoni topasiz.
jqbilan JSON'ni tekshirasiz, chiroyli qilasiz, siqasiz va undan qiymat olasiz.- JSONC, JSON5 va NDJSON oddiy JSON'dan nimasi bilan farq qilishini bilasiz.
Oldin bilishingiz kerak: Matnli va binar fayllar, Zamonaviy CLI vositalari (jq bo'limi), Exit code va buyruqlarni zanjirlash.
1. Nega bu kerak?
Telegram'dagi ob-havo botini tasavvur qiling. Bot serveri Python tilida yozilgan. Ob-havo ma'lumotini esa boshqa kompaniyaning Java'da yozilgan serveridan oladi. Natijani siz telefoningizda ko'rasiz, telefon ilovasi esa uchinchi tilda.
Uch xil til, uch xil dastur. Ular bir-birini qanday tushunadi?
Umumiy "til" kerak. Hayotdan o'xshatish: bank blankasi. Qaysi bankka borsangiz ham, pul o'tkazish blankasida bir xil maydonlar bor: "Kimdan", "Kimga", "Summa". Shakl bir xil bo'lgani uchun har qanday bank xodimi uni o'qiydi.
JSON (JavaScript Object Notation — "JavaScript obyekt yozuvi") — dasturlar uchun ana shunday blanka. Uni har qanday dasturlash tili o'qiy va yoza oladi. Nomida JavaScript bor, chunki yozuvi JavaScript'dan olingan. Lekin JSON'dan foydalanish uchun JavaScript bilish shart emas.
flowchart LR
A["Server<br/>(Python)"] -- "JSON matn" --> B["Telefon ilovasi<br/>(Kotlin)"]
A -- "JSON matn" --> C["Sayt<br/>(JavaScript)"]
D["Boshqa servis<br/>(Java)"] -- "JSON matn" --> ABugun deyarli barcha veb-xizmatlar ma'lumotni JSON'da yuboradi. Bundan tashqari, dasturchining ko'p sozlama fayllari ham JSON: package.json, VS Code'ning settings.json va boshqalar. JSON — matnli fayl, uni odam ham, dastur ham o'qiy oladi.
2. Birinchi JSON
2.1 Obyekt — anketa
Mana kichik JSON:
{
"ism": "Malika",
"yosh": 21,
"talaba": true
}Buni har qatori bo'yicha o'qiymiz:
{va}— jingalak qavslar. Ular orasidagi hamma narsa bitta obyekt (object)."ism": "Malika"— bitta kalit–qiymat juftligi. Chapda kalit (key) — ma'lumot nomi. O'ngda qiymat (value) — ma'lumotning o'zi. Ular orasida ikki nuqta:.- Juftliklar bir-biridan vergul bilan ajratiladi. Oxirgi juftlikdan keyin vergul yo'q.
- Chapdagi bo'sh joylar (indent) — faqat chiroy uchun. JSON uchun ularning ahamiyati yo'q.
Obyekt — nomlangan qiymatlar to'plami. Xuddi anketa kabi: "Ism: ___", "Yosh: ___" maydonlari bor. Kalit — maydon nomi, qiymat — to'ldirilgan javob.
2.2 Massiv — ro'yxat
Ba'zan bitta kalitga bir nechta qiymat kerak. Masalan, Malika biladigan tillar:
{
"ism": "Malika",
"tillar": ["o'zbek", "rus", "ingliz"]
}[ va ] — kvadrat qavslar. Ular orasidagi narsa massiv (array) — tartiblangan ro'yxat. Elementlar vergul bilan ajratiladi. Massivda kalit yo'q: elementlar o'z o'rni bilan farqlanadi — birinchi, ikkinchi, uchinchi.
O'xshatish: bozorga xarid ro'yxati. "1. Non, 2. Sut, 3. Tuxum" — har bir narsaning nomi emas, tartib raqami bor.
Tekshirib ko'ring: Quyidagida nechta obyekt va nechta massiv bor?
{"shahar": "Samarqand", "tumanlar": ["Urgut", "Pastdarg'om"]}
Javob
Bitta obyekt (tashqi { }) va bitta massiv ([ ] — tumanlar ro'yxati). Obyektda ikki kalit bor: shahar va tumanlar. tumanlar ning qiymati — massiv.
3. Oltita qiymat turi
JSON'da qiymat faqat 6 turdan biri bo'lishi mumkin:
| Tur | Misol | Qoida |
|---|---|---|
| Satr (string) | "Toshkent" |
Faqat qo'shtirnoq " ichida |
| Son (number) | 42, -15, 3.14 |
Qo'shtirnoqsiz |
| Mantiqiy qiymat (boolean) | true, false |
Faqat kichik harf |
| Bo'sh qiymat | null |
"Qiymat yo'q" degani |
| Obyekt (object) | {"a": 1} |
Kalitlar — satr |
| Massiv (array) | [1, 2, 3] |
Istalgan turdagi elementlar |
Har biriga bittadan muhim tafsilot:
- Satr. Satr ichida qo'shtirnoq kerak bo'lsa, oldiga teskari slesh qo'yiladi:
"U \"Salom\" dedi". Teskari sleshning o'zi esa ikki marta yoziladi:"C:\\Users\\Ali". Bu ekranlash (escaping) deyiladi — maxsus belgini "oddiy belgi sifatida o'qi" deb belgilash. Satr ichida Enter bosib, yangi qatorga o'tib bo'lmaydi. Qator oxiri\n, tab esa\tdeb yoziladi:"1-qator\n2-qator". - Son.
42va"42"— ikki xil narsa. Birinchisi son, u bilan hisob-kitob qilinadi. Ikkinchisi — shunchaki "4" va "2" belgilari. Son0bilan boshlanmaydi (007— xato) va+belgisisiz yoziladi. - Mantiqiy qiymat. Faqat ikkita:
true(ha) vafalse(yo'q).True,TRUE,"true"— noto'g'ri yoki boshqa tur. null. "Bu qiymat yo'q" degani.0ham, bo'sh satr""ham emas. Masalan,"izoh": null— "mijoz izoh qoldirmagan".
Maslahat: Telefon raqami, pasport seriyasi, pochta indeksi — son emas, satr qilib yozing:
"+998 90 000 00 00". Ular bilan hech kim qo'shish yoki ko'paytirish qilmaydi. Ustiga, ular0yoki+bilan boshlanishi mumkin — sonda bu mumkin emas.
JSON'da sana turi yo'q. Sanalar satr sifatida, xalqaro standart ko'rinishida yoziladi: "2026-09-27" yoki vaqti bilan "2026-09-27T10:30:00Z". Oxiridagi Z — "Grinvich vaqti bo'yicha".
JSON fayl doim UTF-8 kodlashda saqlanadi — bu standartning talabi. Shuning uchun "Toshkent" ham, "Тошкент" ham, "O'zbekiston" ham to'g'ridan-to'g'ri yozilaveradi.
3.1 Ichma-ich tuzilma
Obyekt ichida massiv, massiv ichida obyekt bo'lishi mumkin. Haqiqiy JSON'lar aynan shunday ko'rinadi. Mana onlayn do'kondagi buyurtma:
{
"id": 1024,
"mijoz": "Jasur Karimov",
"telefon": "+998 90 000 00 00",
"tolandi": true,
"izoh": null,
"manzil": {
"shahar": "Toshkent",
"tuman": "Chilonzor"
},
"mahsulotlar": [
{ "nom": "Non", "narx": 4000, "soni": 2 },
{ "nom": "Choy", "narx": 12000, "soni": 1 }
]
}Bu yerda 6 ta turning hammasi bor. manzil — obyekt ichidagi obyekt. mahsulotlar — massiv, uning har bir elementi esa alohida obyekt. Bu faylni keyingi bo'limlarda buyurtma.json deb ishlatamiz.
Tekshirib ko'ring: Yuqoridagi buyurtmada
"narx": 4000va"telefon": "+998 90 000 00 00"— nega biri qo'shtirnoqsiz, ikkinchisi qo'shtirnoqda?
Javob
Narx — son: u bilan hisob qilinadi (4000 × 2 = 8000). Telefon esa raqamlardan iborat bo'lsa ham, u bilan hisob qilinmaydi va + bilan boshlanadi. Shuning uchun u satr.
4. Qat'iy qoidalar
JSON'ni dastur o'qiydi, dastur esa kechirimli emas. Mana buziladigan qoidalar.
4.1 Faqat qo'shtirnoq
Kalitlar ham, satrlar ham faqat " bilan o'raladi:
✅ {"holat": "ok"}
❌ {'holat': 'ok'} — bittalik tirnoq mumkin emas
❌ {holat: "ok"} — kalit qo'shtirnoqsiz bo'lmaydi4.2 Oxirgi vergul yo'q
Oxirgi vergul (trailing comma) — ro'yxatning oxirgi elementidan keyin qolib ketgan vergul. JSON'da u xato:
{
"ism": "Ali",
"yosh": 25,
}25 dan keyingi vergul "yana element bor" deb va'da beradi. Keyin esa } keladi — va'da bajarilmadi. Vergul faqat ikki element orasida turadi.
4.3 Vergul unutilmasin
Teskari xato ham bor — ikki juftlik orasida vergul yo'q:
{
"ism": "Ali"
"yosh": 25
}4.4 Izoh yo'q
JSON ichiga // izoh yoki /* izoh */ yozib bo'lmaydi. JSON faqat ma'lumot uchun yaratilgan. Izoh kerak bo'lsa, uni oddiy kalit qilib yozish mumkin: "_izoh": "bu sozlama test uchun". Yoki boshqa formatni tanlash kerak — pastroqda, «JSON oilasi» bo'limida ko'ramiz.
4.5 Bitta ildiz
Butun fayl — bitta qiymat. Odatda bu bitta obyekt {...} yoki bitta massiv [...]. Ikkita obyektni yonma-yon yozib bo'lmaydi. Ular massivga o'ralishi kerak: [{...}, {...}].
Tekshirib ko'ring:
["olma", "nok", "anor",]— to'g'ri JSON'mi?
Javob
Yo'q. "anor" dan keyin oxirgi vergul bor. To'g'risi: ["olma", "nok", "anor"].
5. jq bilan tekshirish va ishlash
Zamonaviy CLI vositalari darsida jq ni o'rnatgan edik. Endi uni to'liq ishga solamiz.
5.1 Chiroyli qilish va tekshirish
jq . buyurtma.jsonBu buyruq ikki ishni birdan qiladi. JSON to'g'ri bo'lsa — uni chiroyli, rangli ko'rinishda chiqaradi. Xato bo'lsa — xato qayerdaligini aytadi. Masalan, oxirgi vergulli faylda:
jq: parse error: Expected another key-value pair at line 4, column 1Tarjimasi: "o'qish xatosi: 4-qator, 1-ustunda yana bitta kalit–qiymat juftligi kutilgan edi". Vergul "yana bor" degan, lekin 4-qatorda } keldi.
5.2 Faqat tekshirish
Ba'zan chiqarish shart emas — faqat "to'g'rimi?" degan javob kerak. Buning uchun empty filtri bor:
jq empty buyurtma.json && echo "JSON to'g'ri"JSON to'g'ri bo'lsa, jq hech narsa chiqarmaydi va exit code 0 bilan tugaydi. Shunda && dan keyingi echo ishlaydi. Xato bo'lsa — xato matni chiqadi, exit code esa 0 emas (jq da 5), echo ishlamaydi. Serverga yuklashdan oldin sozlama faylini shunday tekshirish qulay.
5.3 Siqish
Chiroyli JSON odam uchun. Tarmoq orqali yuborishda esa bo'sh joy va qator oxirlari keraksiz baytlar. -c (compact — "ixcham") flagi JSON'ni bitta qatorga siqadi:
jq -c . buyurtma.jsonBizning buyurtmamiz 303 baytdan 233 baytga tushadi. Ma'lumot bir xil, hajm esa qariyb chorakka kamaydi. Millionlab so'rovlarda bu farq sezilarli.
5.4 Qiymat olish
. dan keyin kalit nomini yozsangiz — o'sha qiymat chiqadi. Ichma-ich kalitlar nuqta bilan ulanadi:
jq '.mijoz' buyurtma.json # "Jasur Karimov"
jq -r '.manzil.shahar' buyurtma.json # ToshkentMassiv elementi kvadrat qavs ichidagi o'rin raqami bilan olinadi. Raqamlash 0 dan boshlanadi: birinchi element — [0], ikkinchisi — [1].
jq '.mahsulotlar[0].nom' buyurtma.json # "Non"
jq '.mahsulotlar | length' buyurtma.json # 2
jq -r '.mahsulotlar[].nom' buyurtma.jsonOxirgi buyruq natijasi:
Non
Choy.mahsulotlar[0].nom— "mahsulotlar massivining birinchi elementi, uningnomkaliti".| length—jqichidagi o'z pipe'i: massivnilengthga beradi, u elementlarni sanaydi.[](raqamsiz) — "har bir element". Shuning uchun har mahsulot nomi alohida qatorda chiqdi.
Diqqat: Yo'q kalitni so'rasangiz,
jqxato bermaydi —nullqaytaradi.jq '.yetkazish' buyurtma.jsonnatijasinull. Kalit nomini xato yozsangiz ham shunday bo'ladi.nullko'rsangiz, avval kalit nomini tekshiring.
5.5 Boshqa usullar
- VS Code JSON faylidagi xatoni qizil to'lqinli chiziq bilan ko'rsatadi.
Shift + Alt + F(macOS'daShift + Option + F) faylni chiroyli formatlaydi. - Onlayn tekshiruvchilar ham bor ("JSON validator" deb qidiring). Lekin ularga parol, token yoki mijozlar ma'lumoti bor JSON'ni qo'ymang — matn begona serverga ketadi.
Maslahat: Yuqoridagi usullar faqat yozuv to'g'riligini tekshiradi: vergul, qavs, qo'shtirnoq. "
yoshkaliti bo'lishi shart va u son bo'lsin" degan talabni esa JSON Schema tekshiradi. Bu — JSON'ning o'zi bilan yozilgan "qoidalar varag'i". VS Codepackage.jsonni ochganingizda kalitlarni taklif qilishi va xato kalitni belgilashi aynan shu sxema tufayli. Hozircha nomini bilib qo'ysangiz kifoya.
Tekshirib ko'ring:
buyurtma.jsondan birinchi mahsulotning sonini (soni) qaysi buyruq chiqaradi?
Javob
jq '.mahsulotlar[0].soni' buyurtma.json — natija 2. mahsulotlar — massiv, birinchi elementi [0] (raqamlash noldan), uning ichidan soni kaliti.
6. JSON oilasi: JSONC, JSON5, NDJSON
JSON'ning qat'iyligi ma'lumot almashish uchun yaxshi. Lekin odam qo'lda yozadigan sozlamalarda noqulay, katta loglarda esa sekin. Shuning uchun uning "qarindoshlari" paydo bo'lgan.
| Format | Nima qo'shadi | Qayerda uchraydi |
|---|---|---|
| JSONC | Izohlar (//, /* */) |
VS Code settings.json, tsconfig.json |
| JSON5 | Izoh, bittalik tirnoq, oxirgi vergul, qo'shtirnoqsiz kalit | Ba'zi sozlama fayllari (.json5) |
| NDJSON | Har qatorda alohida JSON | Loglar, katta ma'lumot (.jsonl, .ndjson) |
6.1 JSONC — izohli JSON
JSONC (JSON with Comments) — izoh yozish mumkin bo'lgan JSON. Fayl nomi ko'pincha oddiy .json bo'lib qoladi. Masalan, VS Code sozlamalari:
{
// Shrift o'lchami
"editor.fontSize": 16
}VS Code bu faylni o'zining JSONC o'quvchisi bilan o'qiydi, shuning uchun izoh xato emas. Lekin xuddi shu faylni jq ga bersangiz — xato. Kengaytma .json, ichi esa aslida JSONC. Oldingi darsdagi "kengaytma — faqat ishora" haqiqati bu yerda ham ishlaydi.
6.2 JSON5 — odam uchun JSON
JSON5 yanada erkin: bittalik tirnoq, qo'shtirnoqsiz kalitlar, oxirgi vergul ruxsat. Kam uchraydi. Ko'rsangiz, tanib olsangiz kifoya.
6.3 NDJSON — qatorma-qator JSON
NDJSON (Newline Delimited JSON — "qator oxiri bilan ajratilgan JSON"), boshqa nomi JSON Lines. Faylning har bir qatori — alohida, to'liq JSON obyekt:
{"id":1,"voqea":"kirish","vaqt":"10:00"}
{"id":2,"voqea":"xarid","vaqt":"10:02"}
{"id":3,"voqea":"chiqish","vaqt":"10:15"}Bu butun holda to'g'ri JSON emas — «Bitta ildiz» qoidasini eslang: butun faylda bitta qiymat bo'lishi kerak. Lekin har qatori alohida to'g'ri JSON.
Nega shunday qilinadi? Tasavvur qiling, saytda kuniga million voqea bo'ladi. Oddiy JSON'da hammasi bitta katta massiv: yangi voqea qo'shish uchun oxiridagi ] ni ochib, qayta yopish kerak. Faylni o'qish uchun esa uni butunlay xotiraga yuklash kerak. NDJSON'da yangi voqea — shunchaki yangi qator (>> bilan qo'shiladi). O'qish ham qatorma-qator.
jq NDJSON'ni o'zi tushunadi — har qatorni alohida ishlaydi:
jq -r '.voqea' loglar.jsonlkirish
xarid
chiqishTekshirib ko'ring: VS Code'ning
settings.jsonfaylida// izohqatori bor va VS Code xato ko'rsatmayapti.jq . settings.jsonesa xato beryapti. Nega?
Javob
Fayl aslida JSONC — izohli JSON. VS Code uni JSONC deb o'qiydi va izohni kechiradi. jq esa faqat qat'iy JSON'ni biladi, izohni xato deb hisoblaydi. Kengaytma .json bo'lsa ham, ichidagi format boshqa.
7. Ko'p uchraydigan xatolar
jq xato xabarlari qisqa va ba'zan g'alati. Bu yerda eng ko'p uchraydiganlari va ularning haqiqiy sababi.
7.1 Bittalik tirnoq
Faylning 2-qatori 'ism': "Ali" bo'lsa, jq shunday deydi:
jq: parse error: Invalid string literal; expected ", but got ' at line 2, column 8Tarjimasi: "Noto'g'ri satr: " kutilgan edi, lekin ' keldi". Hamma ' ni " ga almashtiring.
7.2 Izoh yoki qo'shtirnoqsiz kalit
Faylning 2-qatori // izoh bo'lsa:
jq: parse error: Invalid numeric literal at line 2, column 5Tarjimasi: "Noto'g'ri son". G'alati, to'g'rimi? Faylda son yo'q-ku! Sababi: qo'shtirnoqsiz yozilgan narsani (// izoh yoki ism) jq son yoki true kabi so'z deb o'qishga urindi va uddalay olmadi. Qoida: Invalid numeric literal ko'rsangiz — ko'rsatilgan qatorda qo'shtirnoqsiz matn qidiring: izoh, qo'shtirnoqsiz kalit yoki True kabi katta harfli so'z.
7.3 Vergul yetishmaydi
jq: parse error: Expected separator between values at line 3, column 8Tarjimasi: "Qiymatlar orasida ajratgich (vergul) kutilgan edi". Ko'rsatilgan qatordan oldingi qator oxiriga qarang — vergul odatda o'sha yerda tushib qolgan.
7.4 Windows yo'li
"yol": "C:\Users\Ali" — \U ni JSON maxsus belgi boshlanishi deb tushunadi va xato beradi:
jq: parse error: Invalid escape at line 2, column 23Tarjimasi: "Noto'g'ri ekranlash". Teskari sleshni ikki marta yozing: "C:\\Users\\Ali". Yoki oddiy slesh ishlating: "C:/Users/Ali" — Windows buni ham tushunadi.
7.5 Ko'rinmas BOM
Matn kodlash darsida ko'rgan edik: fayl "UTF-8 with BOM" bilan saqlansa, boshida ko'rinmas EF BB BF baytlari bo'ladi. jq ning yangi versiyalari BOM'ni kechiradi. Lekin ko'p dasturlar, masalan JavaScript'ning JSON.parse, bunday faylni o'qiy olmaydi. Xato matni g'alati ko'rinadi: Unexpected token '' — qo'shtirnoq ichi bo'shdek, aslida u yerda ko'rinmas BOM belgisi turibdi. xxd -l 3 fayl.json bilan tekshiring va faylni BOM'siz UTF-8 qilib qayta saqlang. VS Code'da: pastki paneldagi UTF-8 with BOM yozuvini bosing, keyin Save with Encoding → UTF-8.
Maslahat: Kelajakda JavaScript'da JSON'ni
JSON.parsebilan o'qiysiz. Uning xato xabarlari boshqacha, lekin ma'nosi o'sha:Expected double-quoted property name— "qo'shtirnoqli kalit nomi kutilgan edi" (ko'pincha oxirgi vergul),Bad escaped character— "noto'g'ri ekranlangan belgi". Buni JavaScript'dagi JSON darsida o'rganamiz.
8. Mashqlar
1-mashq (oson): Uchta xato
Quyidagi JSON'da 3 ta xato bor. Toping va to'g'rilang:
{
'nomi': "Smartfon",
"narxi": 3500000,
"mavjud": true,
// ombordagi qoldiq
}Yechim
'nomi'— bittalik tirnoq. To'g'risi:"nomi".// ombordagi qoldiq— izoh. JSON'da izoh yo'q, o'chiramiz.truedan keyingi vergul — izohni o'chirgach, u oxirgi vergulga aylanadi. Uni ham o'chiramiz.
To'g'ri ko'rinishi:
{
"nomi": "Smartfon",
"narxi": 3500000,
"mavjud": true
}Tekshirish: faylga saqlab, jq empty fayl.json && echo ok bajaring — ok chiqishi kerak.
2-mashq (o'rta): O'zingiz yozing
Quyidagi ma'lumotni JSON'ga aylantiring. Bo'sh joylarni to'ldiring:
- Kursant: Dilnoza, 19 yosh.
- Kursni to'lagan: ha.
- Telegram: hali kiritilmagan.
- Tugatgan darslari: 12, 15, 18.
{
"ism": "Dilnoza",
"yosh": 19,
"tolagan": ___,
"telegram": ___,
"darslar": [12, 15, 18]
}tolagan ning qiymati:
telegram ning qiymati:
Yechim
{
"ism": "Dilnoza",
"yosh": 19,
"tolagan": true,
"telegram": null,
"darslar": [12, 15, 18]
}- "Ha" — mantiqiy qiymat:
true, qo'shtirnoqsiz va kichik harf bilan. - "Hali kiritilmagan" — qiymat yo'q:
null. Bo'sh satr""ham ishlaydi, lekinnull"umuman yo'q" degan ma'noni aniqroq beradi. - Dars raqamlari — sonlar massivi.
3-mashq (qiyin): jq bilan savollar
buyurtma.json faylini («Ichma-ich tuzilma» bo'limidagi) yarating. Quyidagi savollarga jq buyrug'i bilan javob oling:
- Mijoz qaysi tumanda yashaydi? (qo'shtirnoqsiz chiqsin)
- Ikkinchi mahsulotning narxi qancha?
- Buyurtma to'langanmi?
- Butun buyurtmani bitta qatorga siqib,
siqilgan.jsonfayliga yozing.
Yechim
jq -r '.manzil.tuman' buyurtma.json # Chilonzor
jq '.mahsulotlar[1].narx' buyurtma.json # 12000
jq '.tolandi' buyurtma.json # true
jq -c . buyurtma.json > siqilgan.json- 1:
manzilobyekti ichidagituman.-rqo'shtirnoqni olib tashlaydi. - 2: ikkinchi element —
[1], chunki raqamlash0dan boshlanadi.[2]yozsangiz,nullchiqadi — uchinchi element yo'q. - 4:
>natijani faylga yozadi (oqimlar darsi).cat siqilgan.jsonbilan tekshiring — hammasi bitta qatorda.
9. Real ishda
- API javoblari. API — dasturlar bir-biriga so'rov yuboradigan "eshik". Ob-havo, valyuta kursi, to'lov tizimi — deyarli hammasi javobni JSON'da beradi. Siz yozadigan sayt ham serverdan JSON oladi.
- Loyiha sozlamalari.
package.json— har bir JavaScript loyihasining "pasporti" (npm darsida ko'ramiz). VS Code sozlamalari —settings.json(JSONC). - JavaScript. JS'da JSON'ni obyektga aylantirish (
JSON.parse) va teskarisi (JSON.stringify) — kundalik ish. Buni JavaScript'dagi JSON darsida o'rganamiz. - Loglar. Katta tizimlar loglarni NDJSON'da yozadi —
jqbilan qidirish oson. - Intervyu. "JSON'da qanday turlar bor?", "JSON va JavaScript obyekti farqi nima?" — boshlang'ich darajadagi tez-tez beriladigan savollar.
Xulosa
- JSON — dasturlar ma'lumot almashadigan matnli format; uni har qanday til tushunadi.
- Obyekt
{}— kalit–qiymat juftliklari; massiv[]— tartiblangan ro'yxat. - 6 ta tur: satr, son,
true/false,null, obyekt, massiv. Sana turi yo'q — satr sifatida yoziladi. - Qoidalar: faqat
", oxirgi vergul yo'q, izoh yo'q, teskari slesh\\bilan. jq .— tekshirish va chiroyli qilish,jq empty— faqat tekshirish,jq -c— siqish,.kalit[0]— qiymat olish.- JSONC izohga ruxsat beradi, NDJSON har qatorda alohida JSON saqlaydi.
Keyingi dars: CSV va TSV: jadvalli ma'lumot — Excel jadvallarini oddiy matn ko'rinishida saqlaydigan format va uning vergul, qo'shtirnoq hamda kodlash tuzoqlarini o'rganamiz.
Izohlar (0)
Izoh yozish uchun kiring.
- Hozircha izoh yo'q. Birinchi bo'ling!