1. JSON nədir (JavaScript Object Notation)?
JSON (tələffüzü “ceyson”) JavaScript Object Notation ifadəsinin qısaltmasıdır. Adında “JavaScript” sözü olsa da, JSON — Java da daxil olmaqla, demək olar ki, bütün proqramlaşdırma dilləri tərəfindən dəstəklənən universal formatdır.
JSON-u 2000-ci illərin əvvəlində Douglas Crockford brauzer və server arasında məlumat mübadiləsinin sadə yolu kimi irəli sürdü. Ondan əvvəl XML üstünlük təşkil edirdi — çox sözçül və teqlərlə yüklənmiş format.
JSON daha kompakt, daha sadə və “gözlə” oxunması asandır. O, müştəri və server arasında, xüsusən də vebdə və mobil tətbiqlərdə məlumat mübadiləsi üçün tez bir zamanda de-fakto standart oldu.
JSON niyə standart oldu?
- Sintaksisin sadəliyi — əl ilə yazmaq və oxumaq asandır.
- Kompaktlıq — artıq teqlər və “su” yoxdur.
- Oxunaqlılıq — hətta texniki olmayan biri də baş verəni anlayır.
- Parslama asanlığı — dillərin çoxunda daxili və/yaxud üçüncü tərəf kitabxanaları var.
- Dillərarası uyğunluq — Java, Python, Kotlin və s. — JSON hamısı tərəfindən dəstəklənir.
- REST API üçün standart — API-lərin böyük əksəriyyəti JSON qaytarır.
XML ilə müqayisə
| JSON | XML | |
|---|---|---|
| Oxunaqlılıq | Çox yüksək | Orta (çoxlu teq) |
| Ölçü | Kompakt | Daha həcmli |
| Parslama | Sadə | Daha çox səy tələb edir |
| Genişlənmə | Yuvalanmanı dəstəkləyir | Yuvalanmanı dəstəkləyir |
| Sərtlik | Daha az formal | Sxemləri təsvir etmək olur |
| Populyarlıq (2020+) | Çox yüksək | İstifadə olunur, lakin daha az |
Demək olar ki, bütün bəndlərdə JSON qalibdir. Bununla belə, XML mürəkkəb sxemlər, sərt tipləndirmə, XSD ilə validasiya, şərhlər və atributlar lazım olan yerlərdə — məsələn, köhnə sistemlərdə və bank PT-sində — hələ də aktualdır.
Praktikada, əgər siz bank və ya kosmik gəmi üçün PT yazmırsınızsa — JSON istifadə edin.
2. JSON-un əsas sintaksisi
Əgər JavaScript obyektləri və ya digər dillərdəki lüğətlərlə işləmisinizsə, sintaksis sizə tanış görünəcək. Java-da birbaşa “lüğət” yoxdur, onun rolunu java.util paketindən kolleksiyalar, ilk növbədə Map<K, V> (çox vaxt — HashMap<K, V>) icra edir.
Əsas elementlər
- Obyektlər — “açar: dəyər” cütlüklərindən ibarət toplusu, { } ilə əhatələnir.
- Massivlər — dəyərlərin sıralanmış siyahıları, [ ] ilə əhatələnir.
Obyekt nümunəsi:
{
"name": "Alice",
"age": 25
}
Massiv nümunəsi:
[1, 2, 3, 4, 5]
Massivli obyekt nümunəsi:
{
"students": [
"Ivan",
"Maria",
"John"
]
}
Qəbul edilən dəyər tipləri
JSON-da yalnız aşağıdakı məlumat tiplərindən istifadə etmək olar:
| Tip | Nümunə | Təsvir |
|---|---|---|
| Sətir | |
Həmişə ikiqat dırnaqlarda |
| Ədəd | |
Tam və kəsr ədədlər |
| Boolean | |
Məntiqi dəyərlər |
| null | |
“Boş”, dəyərin olmaması |
| Obyekt | |
“açar: dəyər” cütlükləri toplusu |
| Massiv | |
Dəyərlər siyahısı |
Diqqət: obyektlərdə açarlar həmişə ikiqat dırnaqlarda olan sətirlərdir, məsələn "name". Tək dırnaqlara icazə verilmir.
Düzgün JSON nümunələri
{
"id": 1,
"name": "Bob",
"active": true,
"scores": [10, 20, 30],
"profile": {
"email": "bob@example.com",
"phone": null
}
}
Yanlış JSON nümunəsi (xətalar)
{
name: 'Bob', // Xəta: açarlar və sətirlər — yalnız ikiqat dırnaqlarda olmalıdır!
age: 25,
}
Məlumat strukturu: obyekt və massivlərin iç-içəliyi
JSON dərin yuvalanmanı dəstəkləyir: obyektlərin içində obyektlər, obyektlərdə massivlər, massivlərdə obyektlər və s. Bu, matryoşka kimidir.
Mürəkkəb JSON sənədi nümunəsi
{
"university": "Java University",
"students": [
{
"name": "Ivan",
"age": 20,
"courses": ["Math", "Java", "English"]
},
{
"name": "Maria",
"age": 19,
"courses": ["Biology", "Java", "Art"]
}
],
"active": true
}
Köklü obyektdə "university" adlı sətir sahəsi, "active" adlı boolean sahəsi və "students" adlı massiv var; bu massivdə tələbə obyektləri yerləşir.
Vizual sxem (blok-sxem)
{
"açar": dəyər,
"massiv": [
{ "açar": dəyər },
{ "açar": dəyər }
],
"obyekt": {
"açar": dəyər
}
}
4. JSON-un üstünlükləri
JSON niyə bu qədər populyardır?
- İnsan və maşın üçün asan oxunur — strukturu anlamaq rahatdır.
- Kompaktlıq — minimum artıq simvollar.
- Parslama sadəliyi — oxuma/yazma üçün çoxlu kitabxanalar var.
- REST API və mobil tətbiqlər üçün standart — hər yerdə istifadə olunur.
- Elastiklik — həm sadə siyahıları, həm də ağacvari strukturları təsvir edir.
- Konfiqlər, tənzimləmələr, məlumat saxlanması — konfiqurasiya fayllarında tez-tez istifadə olunur.
- Bütün dillər tərəfindən dəstək — Java, Python, Go, Rust və s.
5. Təcrübə: JSON fayllarının nümunələrinin izahı
Nümunə 1: İstifadəçi siyahısı
[
{
"id": 1,
"name": "Alice"
},
{
"id": 2,
"name": "Bob"
}
]
Bu, hər elementi istifadəçi obyekti olan bir massivdir.
Nümunə 2: Tətbiq konfiqurasiyası
{
"debug": true,
"maxConnections": 100,
"database": {
"host": "localhost",
"port": 5432,
"user": "admin",
"password": "qwerty"
}
}
"database" adlı daxili obyektə malik obyekt. Real tətbiq ayarlarına çox oxşardır.
Nümunə 3: JSON-da xətalar
{
"name": "Alice",
"age": 25,
} // Xəta: bağlayıcı mötərizədən əvvəl artıq vergül!
Yadda saxlayın: JSON-da son elementdən sonra vergül qoymaq olmaz.
Nümunə 4: Dırnaqsız açarlar
{ name: "Alice", age: 25 } // Xəta: açarlar ikiqat dırnaqlarda olmalıdır!
6. Faydalı incəliklər
Cədvəl: JSON-da nə olar və nə olmaz
| Olar | Olmaz |
|---|---|
|
|
|
|
|
|
|
|
|
|
JSON və Java obyektlərinin qısa müqayisəsi
| Java | JSON |
|---|---|
|
Ədəd, true/false |
|
“sətir” |
| List<T>, massiv | [dəyər1, dəyər2, ...] |
|
{ "açar": dəyər, ... } |
|
null |
| Sahələri olan sinif | { "sahə": dəyər, ... } |
Nümunə: Java sinfi və onun JSON təsviri
public class Student {
public String name;
public int age;
}
{
"name": "Alice",
"age": 20
}
7. JSON ilə işləyərkən tipik xətalar
Xəta №1: İkiqat dırnaqlar əvəzinə tək dırnaqlar. JSON açarlar və sətirlər üçün yalnız ikiqat dırnaqları qəbul edir.
{ 'name': 'Alice' } // Xəta!
Xəta №2: Artıq vergül. Son elementdən sonra vergül qoymaq olmaz.
{ "name": "Alice", } // Xəta!
Xəta №3: Dırnaqsız açarlar. Açarlar həmişə ikiqat dırnaqlarda olmalıdır.
{ name: "Alice" } // Xəta!
Xəta №4: Əvvəlində sıfır olan ədədlər. Bu cür ədədlərə icazə verilmir.
{ "age": 025 } // Xəta!
Xəta №5: undefined istifadəsi. JSON-da undefined yoxdur, null istifadə edin.
{ "value": undefined } // Xəta!
Xəta №6: True/False böyük hərflə. JSON-da yalnız true və false (kiçik hərflə) var.
{ "active": True } // Xəta!
GO TO FULL VERSION