JSON metodlari va toJSON
Tasavvur qiling, bizda murakkab obyekt bor va uni satrga aylantirishni xohlaymiz, masalan, uni tarmoq orqali uzatish yoki jurnalga yozish uchun.
Tabiiyki, bunday satr barcha muhim xususiyatlarni o'z ichiga olishi kerak.
Biz buni quyidagi tarzda amalga oshirishimiz mumkin:
Lekin dasturlash jarayonida yangi xususiyatlar qo'shilishi, eski xususiyatlar o'zgartirilishi yoki olib tashlanishi mumkin. Har safar toString
funksiyasini yangilab borish qiyinchilik tug'diradi. Xususiyatlar ustidan aylantirib o'tish usulini ham sinab ko'rishimiz mumkin, lekin agar obyekt murakkab va ichki obyektlarni o'z ichiga olsa, ularni ham qayta ishlashimiz kerak bo'ladi.
Yaxshiyamki, bunday vaziyatlar uchun yechim allaqachon tayyor.
JSON.stringify
JSON (JavaScript Obyekt Notatsiyasi) qiymat va obyektlarni ifodalash uchun umumiy formatdir. U RFC 4627 standartida ta'riflangan. Dastlab u JavaScript uchun yaratilgan, ammo boshqa tillar ham JSON bilan ishlash uchun kutubxonalarni ta'minlagan. Shunday qilib, mijoz JavaScriptdan foydalanganda, server esa Ruby/PHP/Java/Whatever tilida yozilgan bo'lsa, JSON orqali ma'lumotlar almashish oson.
JavaScript quyidagi metodlarni taqdim etadi:
JSON.stringify
: obyektlarni JSON formatiga aylantirish uchun.JSON.parse
: JSONni obyektga aylantirish uchun.
Masalan, biz quyida talaba obyektini JSON formatiga aylantiryapmiz:
Metod JSON.stringify(student)
obyektni olib, uni satrga aylantiradi.
Olingan JSON satri "serializatsiya qilingan" yoki "stringify qilingan" obyekt deb ataladi. Biz uni tarmoqqa yuborishga yoki oddiy ma'lumotlar bazasiga yozib qo'yishga tayyormiz.
JSON kodlangan obyekt bilan oddiy obyekt literalining bir necha muhim farqlari bor:
- Satrlar faqat qo'shtirnoqda bo'ladi. JSONda bitta tirnoq yoki backtick ishlatilmaydi. Shunday qilib,
'John'
"John"
ga aylanadi. - Obyekt xususiyatlarining nomlari ham qo'shtirnoqda bo'lishi kerak. Shunday qilib,
age:30
"age":30
ga aylanadi.
JSON quyidagi ma'lumot turlarini qo'llab-quvvatlaydi:
- Obyektlar
{ ... }
- Massivlar
[ ... ]
- Primetivlar:
- Satrlar,
- Raqamlar,
- Boolean qiymatlar
true/false
, null
.
JSON.stringify va cheklovlar
JSON standartida ba'zi JavaScriptga xos xususiyatlar e'tibordan chetda qoladi, masalan:
- Funksiya xususiyatlari (metodlar).
- Simvolik kalitlar va qiymatlar.
undefined
saqlovchi xususiyatlar.
Bu odatda muammo emas. Lekin bunday holatlarda jarayonni sozlash usullari mavjud.
To'liq sintaksis
JSON.stringify
metodining to'liq sintaksisi quyidagicha:
value
: kodlanadigan qiymat.replacer
: kodlanadigan xususiyatlar ro'yxati yoki xaritani almashtirish funksiyasi.space
: formatlash uchun ishlatiladigan joylar soni.
Aksariyat hollarda, JSON.stringify
faqat birinchi argument bilan ishlatiladi. Ammo, agar jarayonni aniq sozlash kerak bo'lsa, masalan, doira havolalarni chiqarib tashlash kerak bo'lsa, ikkinchi argumentdan foydalanish mumkin.
Masalan, quyida replacer
array yordamida ba'zi xususiyatlar kodlanadi:
Yuqorida name
xususiyati ro'yxatga kiritilmaganligi sababli, participants
bo'sh obyektlarni o'z ichiga oladi.
Funksiya sifatida replacer
foydalanish
Ro'yxat o'rniga funksiya ishlatilishi mumkin. Bu funksiya har bir key, value
juftligi uchun chaqiriladi va o'zgaritirilgan qiymatni qaytaradi.
Formatlash: space
Uchinchi argument space
- obyektlarni formallashtirish uchun ishlatiladi:
Maxsus toJSON
metodi
toString
funksiyasiga o'xshab, obyektlar toJSON
metodini taqdim etishi mumkin. JSON.stringify
avtomatik ravishda uni chaqiradi:
JSON.parse
Ma'lumotni qayta o'qish uchun JSON.parse
ishlatiladi:
Agar kerak bo'lsa, reviver
funksiyasi yordamida qiymatlarni tahrirlash mumkin:
Xulosa
- JSON obyektlar, massivlar, primitiv qiymatlar (satrlar, raqamlar, booleanlar) va
null
ni qo'llab-quvvatlaydi. - JavaScript
JSON.stringify
vaJSON.parse
metodlarini taqdim etadi. toJSON
metodi mavjud bo'lsa, u avtomatik ravishda chaqiriladi.