1. Giriş
Əgər siz ən azı bir dəfə müasir API-lərə baxmısınızsa, web-servislərlə işləmisinizsə, mobil tətbiqlər üzərində işləmisinizsə və ya sadəcə nəyisə "universal formatda" saxlamağa çalışmısınızsa — artıq JSON-la qarşılaşmısınız və ya qarşılaşacaqsınız. Bu həmin formatdır ki, fərqli proqramlaşdırma dillərini və platformaları "bağlayır": C#, JavaScript, Python — hamısı JSON ilə danışır.
Niyə məhz JSON serializasiya sahəsində ulduz oldu? Cavab sadədir: kompakt, insan-oxunan və yüngül mətn formatıdır. Onun populyarlığı sadəliyin, universal olmağın və proqramlaşdırma dillərində əla dəstəyin uğurlu kombinasiyasıdır.
JSON nədir?
JSON — JavaScript Object Notation-un qısaltmasıdır. Format JavaScript dünyasından yaranıb, amma tezliklə browser-dən bayıra çıxdı. Vacibdir: adın mənşəyinə baxmayaraq, JSON JavaScript-ə bağlı deyil və bütün dillər üçün eyni dərəcədə rahatdır.
Format 2000-ci illərin əvvəlində Douglas Crockford tərəfindən XML-in daha sadə alternativi kimi ixtira olundu. İdeya sadədir: «JSON daha qısa, daha sadə və gözlə oxumaq üçün daha asandır».
2. JSON-formatının əsas qaydaları
Əsas: JSON — strukturlaşdırılmış məlumatlar üçün sərt təyin edilmiş mətn formatıdır. Heç bir sehr yoxdur, sadəcə adi mətn, hər hansı redaktorda açmaq olar.
Əsas konstruksiyalar:
- Massivlər (arrays): sıralı dəyər siyahıları.
- Obyektlər (objects): açar-dəyər cütlərindən ibarət kolleksiyalar.
- Sadə tiplər: stringlər, ədədlər, boolean dəyərlər (true, false) və xüsusi dəyər null.
Minimal JSON-sənəd nümunəsi:
{
"name": "Ivan",
"age": 25,
"isStudent": true,
"scores": [5, 4, 5, 3],
"contacts": {
"email": "ivan@example.com",
"phone": null
}
}
Şematik struktur
Burada C# tipləri ilə JSON təmsilatı arasında sadə uyğunluq cədvəlidir:
| C# tip | JSON nümunəsi |
|---|---|
|
|
|
|
|
|
| massiv (int[], ...) | |
| obyekt (class, ...) | |
|
|
JSON yazı qaydaları
- Stringlər həmişə cüt dırnaqda: 'text' — səhvdir, doğru "text".
- Obyekt açarları — cüt dırnaq içərisində stringlər: məsələn, "name": ...
- Vergüllər yalnız elementlər arasında olmalıdır, son elementdən sonra vergül olmaz.
- İndentlər məcburi deyil, amma oxunaqlığı artırır.
- Ədədlər dırnaq olmadan: "age": 25, yoxsa "age": "25" yazmaq düzgün deyil.
- Boolean dəyərlər — true/false (dırnaq olmadan), True, FALSE və ya "true" düzgün deyil.
- null null kimi yazılır (dırnaq olmadan).
3. Programçı gözü ilə JSON
C# tipləri ilə analogiyalar:
- JSON-obyekt ≈ Dictionary<string, object>
- JSON-massiv ≈ T[] və ya List<T>
- JSON-string ≈ adi string
- JSON-ədəd ≈ int və ya double (dəyərdən asılı olaraq)
Obyekti JSON-a serialize etmək nümunəsi
Class:
public class Student
{
public string Name { get; set; } = "";
public int Age { get; set; }
public bool IsStudent { get; set; }
public int[] Scores { get; set; } = Array.Empty<int>();
}
Nəticədə alınan JSON (sadələşdirilmiş, serialize detalları aşağıda):
{
"Name": "Ivan",
"Age": 25,
"IsStudent": true,
"Scores": [5, 4, 5, 3]
}
4. Etibarlı JSON-strukturların nümunələri
Massiv və iç-içə obyektlər olan obyekt
{
"product": "Kofe",
"price": 125.50,
"inStock": true,
"attributes": {
"weight": 500,
"unit": "gr"
},
"tags": ["napitok", "energiya", "arabika"],
"promotions": null
}
Obyektlər massivi
[
{"id": 1, "name": "Petya"},
{"id": 2, "name": "Masha"},
{"id": 3, "name": "Vasya"}
]
5. Etibarsız JSON nümunələri (və niyə)
Tək dırnaq:
{ 'name': 'Ivan' } // Səhv!
JSON ikiqat dırnaq tələb edir.
Sonuncu elementdən sonra vergül:
{ "x": 1, "y": 2, } // Səhv!
Axırda artıq vergül icazə verilmir.
Şərhlər:
{
// Belə şərhlər təəssüf ki, JSON-da işləmir
"name": "Ivan"
}
JSON-da şərhlər yoxdur.
6. Real layihələrdə JSON-un nə üçün lazım olduğu
Sistemlər arasında məlumat ötürülməsi
JSON — fərqli proqramlar arasında universal "ortaq dil", adətən HTTP üzərində. Məsələn, server C#-də, frontend JavaScript-dədirsə — onların ortaq formatı JSON-dur.
Konfiqurasiyaların və məlumatların saxlanması
Çox tətbiqlər parametrləri .json fayllarında saxlayır. Məsələn, appsettings.json — .NET tətbiqləri üçün standartdır. Üstünlükləri: oxumaq, dəyişmək və versionlamaq asandır.
Server və mobil API-lər
Çox REST API-lər sorğu və cavab formatı kimi JSON-dan istifadə edir: məsələn, istifadəçilər siyahısı obyektlər massivi kimi gəlir.
Alət və kitabxana konfiqurasiyaları
Bir çox .NET alətləri (Serilog, Swagger və s.) konfiqurasiyalar üçün JSON-dan istifadə edir. XML daha az rast gəlinir — JSON daha kompakt və aydın olur.
7. JSON-un populyarlığı: niyə hamı onu sevir?
- Oxunaqlıq. Hətta proqramçı olmayan da nəyin nə olduğunu anlaya bilər.
- Şəbəkə üzrə ötürülmə rahatlığı. Adi mətn, aşağı "çəki".
- Hər dildə dəstək. Serializasiya/deserializasiya demək olar ki, "qutudan çıxarılaraq" mövcuddur.
- Konfiqurasiyalar üçün əlverişlidir. Hər hansı redaktorlar onunla yaxşı işləyir.
- Yaratmaq asandır. JSON yaratmaq çox sadədir.
- Massivlər, iç-içəlik, null. Hər şey intuïtivdir, XML-də olduğu kimi "mötərizə xəstəliyi" yoxdur.
Hansı hallarda JSON seçmək daha yaxşıdır?
- Mobil və ya web tətbiq yaradırsınızsa;
- Xarici xidmətlərin API-ləri ilə işləyirsinizsə;
- Gələcək inteqrasiyalara dost tətbiq yaratmaq istəyirsinizsə.
8. C# JSON ilə necə işləyir
Qısa olaraq məşhur .NET kitabxanalarından:
- System.Text.Json — standart, sürətli və sadə.
- Newtonsoft.Json (Json.NET) — geniş imkanlı "veteran".
Minimal serialize/deserializasiya nümunəsi:
using System.Text.Json;
// Obyekti JSON-string-ə çeviririk
var student = new Student { Name = "Ivan", Age = 25, IsStudent = true, Scores = new[] {5, 4, 5, 3} };
string json = JsonSerializer.Serialize(student);
// Əksinə: JSON-string-dən obyekt oxuyuruq
Student? parsed = JsonSerializer.Deserialize<Student>(json);
Console.WriteLine(json);
9. Yeni başlayanların JSON ilə işləyərkən tipik səhvləri
Tez-tez edilən səhv — dırnaq növünü qarışdırmaq və ya vergülü unutmaq. Bəzən şərh əlavə etməyə çalışırlar (C#-da rahatdır!), amma JSON bunu bağışlamır.
Daha bir tez-tez rast gəlinən hal — kolleksiyaları ilkinləşdirməmək: nəticədə "scores": null alırsınız, gözlənilən massiv əvəzinə. Kolleksiyaları əvvəlcədən inicializasiya edin.
Unutmayın, JSON mətn formatıdır: böyük həcmli məlumatlar çox yaddaş tutur. Məsələn, şərti 500 MB JSON serialize etsəniz, tətbiqin performansı ciddi dərəcədə düşə bilər.
GO TO FULL VERSION