- JSON formatının qaydalarını bilmək və onu JavaScript obyektindən fərqləndirmək
JSON.stringifyvəJSON.parseilə verilənləri çevirməktry,catch,finallyvəthrowilə xətaları idarə etmək
Hava proqramı Bakı üçün proqnozu serverdən alır. Server ona obyekt yox, mətn göndərir — şəbəkə ilə yalnız mətn ötürülə bilər. Bəs bu mətn yarımçıq gəlsə və ya səhv yazılsa? Yaxşı proqram çökmür: o, problemi tutur və istifadəçiyə aydın mesaj göstərir. Bu dərsdə hər iki bacarığı öyrənəcəksən.
JSON nədir?
JSON (JavaScript Object Notation) verilənləri mətn şəklində saxlamaq və ötürmək üçün formatdır. O, JavaScript obyektlərinə çox bənzəyir, amma bütün dillər onu başa düşür: Python, Java, C# və s. Bu gün saytlar, mobil tətbiqlər və serverlər bir-biri ilə əsasən JSON vasitəsilə «danışır».
{
"city": "Baku",
"temperature": 24,
"sunny": true,
"forecast": [25, 27, 22],
"wind": { "speed": 5, "direction": "north" },
"warning": null
}| Xüsusiyyət | JavaScript obyekti | JSON |
|---|---|---|
| Açarlar | dırnaqsız ola bilər | yalnız cüt dırnaqda |
| Sətirlər | istənilən dırnaq | yalnız cüt dırnaq |
Funksiyalar, undefined | olar | olmaz |
| Şərhlər, sonda vergül | olar | olmaz |
JSON.stringify və JSON.parse
JSON.stringify obyekti JSON sətrinə çevirir — göndərmək və ya yadda saxlamaq üçün. JSON.parse isə əksini edir: JSON sətrindən yenidən obyekt yaradır. Üçüncü arqument kimi 2 versən, stringify mətni oxunaqlı şəkildə, girintilərlə düzür.
const weather = { city: 'Baku', temperature: 24, sunny: true };
const text = JSON.stringify(weather);
console.log(text);
console.log(typeof text);
const back = JSON.parse(text);
console.log(back.city, typeof back);
console.log(JSON.stringify({ name: 'Leyla', level: 3 }, null, 2));▸ Gözlənilən nəticə
{"city":"Baku","temperature":24,"sunny":true}
string
Baku object
{
"name": "Leyla",
"level": 3
}const profile = {
name: 'Leyla',
nickname: undefined,
greet() { return 'Hi!'; },
born: new Date('2010-05-28'),
};
console.log(JSON.stringify(profile));▸ Gözlənilən nəticə
{"name":"Leyla","born":"2010-05-28T00:00:00.000Z"}Xətalar və try...catch
Proqram icra olunarkən problem yarananda JavaScript xəta (exception) yaradır. Tutulmayan xəta proqramı dayandırır. Ən çox rast gəlinən növləri: SyntaxError (səhv yazılış, məsələn, pozuq JSON), TypeError (qiymətlə mümkün olmayan əməliyyat, məsələn, null-un xassəsini oxumaq) və ReferenceError (mövcud olmayan dəyişən).
Riskli kodu try blokuna yerləşdiririk. Orada xəta baş versə, try-ın qalan hissəsi ötürülür və idarə catch blokuna keçir; catch xəta obyektini alır. finally bloku isə xəta olub-olmamasından asılı olmayaraq həmişə icra olunur.
const input = '{ city: Baku }';
try {
const data = JSON.parse(input);
console.log('City:', data.city);
} catch (error) {
console.log('Could not read the data:', error.name);
} finally {
console.log('Check finished');
}
try {
const user = null;
console.log(user.name);
} catch (error) {
console.log('Problem:', error.name);
}▸ Gözlənilən nəticə
Could not read the data: SyntaxError Check finished Problem: TypeError
input mətnində açar və qiymət dırnaqsızdır — bu, JSON deyil. city və Baku sözlərini cüt dırnağa al və kodu yenidən işə sal.Öz xətanı atmaq: throw
Bəzən JavaScript üçün hər şey qaydasındadır, amma proqramın məntiqi pozulur: məsələn, balansdan çox pul çıxarmaq istənilir. Belə hallarda throw new Error('...') ilə öz xətanı yaradırsan. throw-dan sonrakı kod icra olunmur, xəta isə ən yaxın catch-ə qədər «uçur».
function withdraw(balance, amount) {
if (amount > balance) {
throw new Error('Not enough money');
}
return balance - amount;
}
try {
console.log(withdraw(100, 30));
console.log(withdraw(100, 500));
console.log('This line is never printed');
} catch (error) {
console.log('Error:', error.message);
}▸ Gözlənilən nəticə
70 Error: Not enough money
Elə safeParse(text, fallback) funksiyası yaz ki, JSON düzgündürsə obyekti, pozuqdursa ehtiyat qiyməti qaytarsın.
Həllini göstərHəllini gizlət
JSON.parse-ı try içində çağırıb nəticəni qaytarırıq.Xəta baş versə,
catch bloku fallback-i qaytarır.Belə funksiya proqramın qalan hissəsini xətalardan qoruyur (koda bax).
function safeParse(text, fallback) {
try {
return JSON.parse(text);
} catch {
return fallback;
}
}
console.log(safeParse('[1, 2, 3]', []));
console.log(safeParse('oops', []));
console.log(safeParse('{"score": 90}', {}).score);▸ Gözlənilən nəticə
[ 1, 2, 3 ] [] 90
readScore(text) funksiyasını tamamla: o, JSON mətnini oxuyub score qiymətini qaytarmalıdır. Mətn düzgün JSON deyilsə, 'Invalid JSON' mesajlı, bal 0–100 aralığında deyilsə, 'Score out of range' mesajlı xəta at (throw new Error(...)). Aşağıdakı dövr hər nəticəni və ya xəta mesajını çap edir.
function readScore(text) {
// 1) JSON.parse inside try...catch → throw new Error('Invalid JSON')
// 2) score outside 0–100 → throw new Error('Score out of range')
// 3) return the score
}
const inputs = ['{"score": 92}', '{"score": 140}', '{score: 50}'];
for (const text of inputs) {
try {
console.log('Score:', readScore(text));
} catch (error) {
console.log('Error:', error.message);
}
}▸ Gözlənilən nəticə
Score: 92 Error: Score out of range Error: Invalid JSON
Əsas fikirlər
- JSON verilənləri mətn kimi ötürmək üçün universal formatdır; açarlar və sətirlər cüt dırnaqda yazılır.
JSON.stringifyobyekti mətnə,JSON.parsemətni obyektə çevirir.tryriskli kodu saxlayır,catchxətanı tutur,finallyhəmişə icra olunur.throw new Error('...')öz xətanı yaradır; ondan sonrakı kod icra olunmur.- Xəta obyektinin
namevəmessagexassələri var; xətaları səssizcə udma.
Özünü yoxla
10 sual. Hər düzgün cavab XP qazandırır.