JSON formati, JSON.stringify va JSON.parse metodlari, pretty print, localStorage bilan ishlash, ma'lumot yo'qolishi (undefined, function) hamda xatoliklarni boshqarish.
JSON — turli dasturlash tillari va tizimlar orasida ma'lumot almashish uchun ishlatiladigan eng mashhur format. Bu bobda JSON bilan ishlashni o'rganamiz.
JSON (JavaScript Object Notation) — ma'lumotni matn (string) ko'rinishida saqlash uchun ishlatiladigan format, u JavaScript object sintaksisiga juda o'xshaydi.
Server bilan brauzer orasida, yoki ikkita turli dastur orasida ma'lumot almashish kerak bo'lganda, ob'ektni to'g'ridan-to'g'ri yuborib bo'lmaydi — uni matn (string) ko'rinishiga o'tkazish kerak. JSON — bu vazifani bajaradi.
📦 JSON — bu xalqaro pochta bo'g'lami: har qanday davlat (dasturlash tili) uni ochib, ichidagi ma'lumotni tushuna oladi, chunki format universal.
data.jsonJSON{"name": "Ali","age": 25,"isStudent": false,"hobbies": ["kitob o'qish", "sport"]}
⚠️ Common Mistake
JSON'da key nomlari har doim qo'sh tirnoq ("key") bilan yozilishi kerak, JavaScript object'idagidek tirnoqsiz emas. Bundan tashqari, JSON'da function, undefined va comment yozib bo'lmaydi.
JSON.stringify() — JavaScript object'ni JSON formatidagi stringga aylantiradi.
script.jsJavaScriptlet user = {name: "Vali",age: 30,isActive: true};let jsonString = JSON.stringify(user);console.log(jsonString);// '{"name":"Vali","age":30,"isActive":true}'console.log(typeof jsonString); // "string"
E'tibor bering: natija — oddiy object emas, balki string. Buni typeof orqali tekshirib ko'rish mumkin.
script.jsJavaScriptlet formatted = JSON.stringify(user, null, 2);console.log(formatted);
Natija:
data.jsonJSON{"name": "Vali","age": 30,"isActive": true}
JSON.stringify(object, replacer, space) — uchinchi argument (2) — har bir daraja uchun nechta bo'shliq qo'yishni belgilaydi, bu natijani o'qish uchun qulay qiladi.
JSON.parse() — JSON.stringify()ning teskarisi: JSON formatidagi string'ni qayta JavaScript object'ga aylantiradi.
script.jsJavaScriptlet jsonString = '{"name":"Karim","age":28}';let user = JSON.parse(jsonString);console.log(user.name); // "Karim"console.log(typeof user); // "object"
code.textTEXTJavaScript Object → JSON.stringify() → JSON String↑ │└──────────── JSON.parse() ──────────────┘
💡 Key Idea
stringify va parse — bir-birining aynan teskarisi. Ma'lumotni saqlash yoki yuborish uchun stringify, qaytadan ishlatish uchun parse ishlatiladi.
Brauzerning localStoragesi faqat stringlarni saqlay oladi, shuning uchun object saqlash uchun uni avval JSON'ga aylantirish kerak.
script.jsJavaScriptlet settings = { theme: "dark", fontSize: 16 };// SaqlashlocalStorage.setItem("settings", JSON.stringify(settings));// O'qishlet saved = JSON.parse(localStorage.getItem("settings"));console.log(saved.theme); // "dark"
🔗 Connection
localStorage haqida Chapter 36'da batafsil to'xtalamiz — bu yerda JSON bilan bog'liqligini ko'rish uchun misol sifatida keltirdik.
JSON.stringify() barcha ma'lumot turlarini bir xilda saqlay olmaydi — ba'zi qiymatlar o'zgaradi yoki umuman yo'qoladi.
| Original qiymat | JSON.stringify natijasi |
|---|---|
undefined (property sifatida) | Property butunlay o'chib ketadi |
function | Property butunlay o'chib ketadi |
NaN, Infinity | nullga aylanadi |
Date object | ISO string formatiga aylanadi |
undefined (array ichida) | nullga aylanadi |
script.jsJavaScriptlet data = {name: "Test",value: undefined,calculate: function () { return 1; },score: NaN,createdAt: new Date()};console.log(JSON.stringify(data));// {"name":"Test","score":null,"createdAt":"2026-..."}// value va calculate umuman yo'q!
undefined va function'lar JSON formatida "ifodalab bo'lmaydigan" qiymatlar hisoblanadi, shuning uchun ular natijadan butunlay chiqarib tashlanadi. NaN esa sonlarga tegishli bo'lsa-da, JSON standarti uni qo'llab-quvvatlamagani uchun nullga aylanadi.
⚠️ Common Mistake
Function yoki metodlarga ega object'ni to'g'ridan-to'g'ri JSON.stringify() qilish — metodlarning "yo'qolib qolishiga" olib keladi. Agar ma'lumot va xatti-harakat (method) birga saqlanishi kerak bo'lsa, JSON bunga mos kelmaydi.
Agar JSON.parse()ga noto'g'ri formatdagi string berilsa, u xatolik chiqaradi. Shuning uchun uni har doim try/catch bilan himoyalash tavsiya etiladi (Chapter 18'da o'rgangan bilim shu yerda qo'llaniladi).
script.jsJavaScriptlet invalidJson = "{name: 'Ali'}"; // noto'g'ri format (key tirnoqsiz)try {let data = JSON.parse(invalidJson);} catch (error) {console.log("JSON formati noto'g'ri: " + error.message);}
🔗 Connection
Bu — Chapter 18'da o'rgangan try/catchning amaliy qo'llanilishiga yaqqol misol: tashqi manbadan (server, localStorage, fayl) kelgan ma'lumot har doim "ishonchsiz" deb qaralishi va xavfsiz tarzda ishlov berilishi kerak.
Task:
{ name: "Anvar", age: 24 } object'ini JSON.stringify() yordamida string'ga aylantiring va uni chiqaring.
Required Concepts:
JSON.stringify()console.log(JSON.stringify(obj)) yozing.Task:
Quyidagi JSON string'ni object'ga aylantirib, undagi hobbies array'ining birinchi elementini chiqaring:
script.jsJavaScriptlet jsonStr = '{"name":"Malika","hobbies":["rasm chizish","sayohat"]}';
Required Concepts:
JSON.parse()JSON.parse(jsonStr).hobbies[0]Task:
saveUser(user) va loadUser() nomli ikkita function yozing: saveUser — object'ni JSON'ga aylantirib, oddiy variable'da "saqlasin" (localStorage o'rniga variable ishlatavering), loadUser esa uni qaytadan object'ga aylantirib qaytarsin. loadUserni try/catch bilan himoyalang.
Required Concepts:
JSON.stringify(), JSON.parse()try/catchloadUser ichida uni parse qiling.script.jsJavaScriptlet data = {name: "Test",age: undefined,isActive: true};let json = JSON.stringify(data);console.log(json);
🧠 Think first! Javobni ko'rishdan oldin kamida 30 soniya o'ylang.
<details> <summary>Answer</summary> '{"name":"Test","isActive":true}'Why?
age qiymati undefined, va JSON.stringify() undefined qiymatga ega propertylarni natijadan butunlay olib tashlaydi.
Quyidagi kodda muammo bor:
script.jsJavaScriptlet userInput = "{'name': 'Ali'}"; // yagona tirnoq ishlatilganlet user = JSON.parse(userInput);console.log(user.name);
Your Task:
Yechim (a):
script.jsJavaScriptlet userInput = '{"name": "Ali"}'; // to'g'ri formatlet user = JSON.parse(userInput);console.log(user.name); // "Ali"
Yechim (b):
</details>script.jsJavaScriptlet userInput = "{'name': 'Ali'}";try {let user = JSON.parse(userInput);console.log(user.name);} catch (error) {console.log("Noto'g'ri JSON format: " + error.message);}
JSON.stringify() — object'ni JSON string'ga aylantiradi.JSON.parse() — JSON string'ni object'ga aylantiradi.undefined, function'lar JSON.stringify()da yo'qoladi, NaN esa nullga aylanadi.JSON.parse() — noto'g'ri format bilan xatolik berishi mumkin, try/catch bilan himoyalash kerak.stringify va parse — bir-birining teskarisi.undefined — JSON'da ifodalanmaydi, ular natijadan yo'qoladi.try/catch bilan qayta ishlang.localStorage, server bilan almashinuv (API) — JSON eng ko'p ishlatiladigan joylar.script.jsJavaScriptlet obj = { name: "Ali", age: 25 };let jsonStr = JSON.stringify(obj); // object → stringlet parsed = JSON.parse(jsonStr); // string → objectJSON.stringify(obj, null, 2); // chiroyli formatlashtry {JSON.parse(someString);} catch (error) {console.log("Noto'g'ri JSON");}
Mavzu bo‘yicha tushunchalaringizni interaktiv test orqali sinovdan o‘tkazing va natijalarni bilib oling.
Darslikda o‘rganilgan qoidalarga asosan real kod yozing, testlardan o‘tkazing va yechimlarni mustahkamlang.
Test Sinovi
Hali topshirilmagan (kamida 75% kerak)
Amaliy Masalalar
0 / 3 ta yechildi (kamida 75% kerak)
Dars sifati va mazmunini yaxshilash uchun o‘z haqqoniy bahoingizni qoldiring.
Mavzuni to‘liq o‘zlashtirish uchun test sinovi, amaliy kodlash va bog‘liq darslar
O‘z bilimingizni interaktiv test savollari orqali tekshiring va darhol xatolarni tahlil qiling.
Nazariyani real kod yozish bilan mustahkamlang, avtomatik testlardan o‘ting va XP to‘plang.
Kurs bo‘yicha keyingi va bog‘liq mavzular: