Ma'lumot turlari

JSON metodlari, toJSON

Obyektni tarmoq orqali yuborish yoki faylda saqlash uchun uni matnga aylantirish kerak. JSON (JavaScript Object Notation) โ€” bu ma'lumotni almashish uchun umumiy qabul qilingan format. JavaScript'da JSON.stringify va JSON.parse metodlari mavjud.

JSON.stringify

JSON.stringify(obj) โ€” obyektni JSON satriga aylantiradi:

stringify.js
// natija shu yerda chiqadi

Hosil bo'lgan satr JSON-kodlangan (JSON-encoded) deb ataladi. Uning JavaScript obyektidan farqlari:

Qo'llab-quvvatlanadigan turlar

JSON.stringify quyidagi turlarni qo'llab-quvvatlaydi: obyektlar, massivlar, satrlar, sonlar, mantiqiy qiymatlar (true/false) va null.

supported-types.js
// natija shu yerda chiqadi

Ammo ba'zi turlar e'tiborsiz qoldiriladi yoki tashlab ketiladi:

ignored-types.js
// natija shu yerda chiqadi
JSON halqasimon (circular) havolalarni qo'llab-quvvatlamaydi. Agar obyekt o'z-o'ziga havola qilsa, JSON.stringify xatolik beradi.

Ichma-ich obyektlar

JSON.stringify ichma-ich obyekt va massivlarni ham to'liq aylantiradi โ€” hech qanday qo'shimcha kod kerak emas:

nested-stringify.js
// natija shu yerda chiqadi

Bo'shliq (space) argumenti โ€” chiroyli chiqarish

JSON.stringifyning uchinchi argumenti โ€” chiroyli, o'qish oson formatlash uchun. Odatda unga bo'shliqlar soni beriladi:

pretty.js
// natija shu yerda chiqadi
Ikkinchi argument (bu yerda null) โ€” replacer bo'lib, uni keyingi bo'limda tushuntiramiz. Chiroyli chiqarish faqat logga qarash uchun kerak; tarmoq orqali yuborishda odatda bo'shliqsiz (kichikroq) satr ishlatiladi.

Replacer โ€” nimalarni saqlashni tanlash

Ikkinchi argument replacer โ€” u qaysi xossalarni JSON'ga kiritishni boshqaradi. U ikki xil bo'lishi mumkin:

Massiv โ€” faqat sanab o'tilgan kalitlar saqlanadi:

replacer-array.js
// natija shu yerda chiqadi

Funksiya โ€” har bir kalit-qiymat juftligi uchun chaqiriladi. Qaytargan qiymat saqlanadi; undefined qaytarsa, xossa tashlab ketiladi:

replacer-func.js
// natija shu yerda chiqadi

JSON.parse

JSON.parse(str) โ€” JSON satrini yana JavaScript obyektiga aylantiradi (bu stringifyning teskarisi):

parse.js
// natija shu yerda chiqadi

Massivlarni ham xuddi shunday o'qiydi:

parse-array.js
// natija shu yerda chiqadi
JSON juda qat'iy: kalitlar va satrlar ikki tirnoqda bo'lishi shart, oxirida ortiqcha vergul bo'lmasligi kerak, izohlar (comment) qo'yib bo'lmaydi. Aks holda JSON.parse xatolik beradi.

Reviver โ€” o'qishda qiymatlarni tiklash

JSON.parse(str, reviver) โ€” ikkinchi argument sifatida funksiya berilsa, u har bir kalit-qiymat juftligini o'qishda chaqiriladi. Bu, masalan, sana satrini yana Date obyektiga aylantirish uchun kerak:

reviver.js
// natija shu yerda chiqadi

toJSON metodi

Obyektlar toString metodiga o'xshab, toJSON metodiga ega bo'lishi mumkin. Agar u mavjud bo'lsa, JSON.stringify obyektni to'g'ridan-to'g'ri aylantirish o'rniga aynan shu metodni chaqiradi:

tojson.js
// natija shu yerda chiqadi
Aslida o'rnatilgan Date obyektida ham toJSON mavjud. Shuning uchun JSON.stringify sanalarni avtomatik ravishda standart ISO satr formatida saqlaydi.

Xulosa