1. JSON-u xatırlayaq
JSON açılır JavaScript Object Notation. Adında JavaScript sözü olsa da, bu format tamamilə dil-neitraldır və demək olar ki, bütün proqramlaşdırma dillərinə — o cümlədən C#-a — uyğun gəlir. Onu məlumatları — obyektləri, massivləri, siyahıları və sözlükləri — adi mətn şəklində rahat və anlaşılan şəkildə təsvir etmək üçün yaradıblar.
Müasir dünyada, demək olar ki, hər bir proqram başqa proqramlarla ünsiyyət qurduğuna görə, JSON praktikada strukturlaşdırılmış məlumatların serializasiyası və mübadiləsi üçün standart halını alıb. O hər yerdə istifadə olunur: REST API-dən tutmuş istifadəçi parametrlərinin saxlanmasına və hətta mikrosərvislər arasında daxili qarşılıqlı əlaqəyə qədər. Səbəbi isə asandır — insan üçün oxunandır (əgər insan qıvrılmış mötərizələrdən qorxmursa), parsing üçün sadədir və bütün müasir dillər və kitabxanalar tərəfindən dəstəklənir.
Niyə XML deyil?
JSON daha sadə, qısa və oxunaqlıdır XML-dən. Həmçinin, o əlavə səs-küydən və teqlərdən azaddır və əksər proqramlaşdırma dillərinin məlumat strukturlarına daha məntiqli oturur. Ayrıca bağlanan teqlərlə, sitat işarələri ilə və digər XML-bürokratiyası ilə məşğul olmaq lazım deyil. Qısası — JSON üçün daha sürətli, daha sadə, daha rahat demək olar.
2. JSON sintaksisinin əsas elementləri
Tutaq ki, JSON sadə bir ağacdır (və ya matryoshka), obyektlərdən, massivlərdən və elementar məlumatlardan ibarətdir. Bizim əlimizdə olan «kərpiclər» bunlardır:
Obyektlər (Objects)
JSON obyekti — açar: dəyər cütlərindən ibarət toplusudur, qıvrılmış mötərizələrlə əhatə olunur { }.
Nümunə:
{
"name": "Alice",
"age": 23
}
C#-da belə struktur sinif və ya sözlük (dictionary) kimi təsvir oluna bilər.
Massivlər (Arrays)
JSON massivi — elementlərdən ibarət sifarişli siyahıdır (istənilən tipdə dəyərlər), kvadrat mötərizələrdə verilir [ ].
Nümunə:
[1, 2, 3, 42]
Yaxud belə:
[
{"name": "Ivan"},
{"name": "Olga"}
]
C#-da bu List<T>, T[] və oxşar kolleksiyalar olur.
Açar-dəyər cütlükləri
Açarlar həmişə sətirlərdir (ikiqat dırnaqda!), dəyərlər isə JSON-da icazə verilən istənilən məlumat tipləri ola bilər.
Nümunə:
{
"id": 123,
"login": "student",
"isActive": true
}
JSON-da məlumat tipləri
| JSON tipi | Nümunə | Təsvir |
|---|---|---|
| Rəqəm (Number) | |
Tam və ya onluq ədəd |
| Sətir (String) | |
Həmişə ikiqat dırnaqlarda |
| Boolean (Boolean) | |
Məntiqi dəyər |
| null | |
Dəyərin olmaması |
| Obyekt (Object) | |
Sözlük və ya sahələri olan entitə |
| Massiv (Array) | |
Dəyərlərin ardıcıllığı |
Nümunə — hamısı birlikdə:
{
"id": 1,
"name": "Bob",
"scores": [10, 20, 30],
"profile": {
"email": "bob@mail.com",
"phone": null
},
"isAdmin": false
}
Görürsünüz, bir istifadəçi obyektini necə kompakt və məntiqi şəkildə təsvir etmək olar.
3. JSON yazılış qaydaları
Sətirlər həmişə ikiqat dırnaqlarda
Tək dırnaq qoymaq çox istəsəniz də, JSON bunu qəbul etmir. Doğru belədir:
{ "name": "Vera" }
Belə isə — səhvdir:
{ 'name': 'Vera' }
Açarlar — yalnız sətirlər
C#-da sözlüyün açarı int və ya enum da ola bilər, amma JSON-da açar həmişə sətirdir:
{ "2025": "God C#", "favorite": true }
Heç bir trailing vergül olmaz
C#-dakı array və obyektlərdən fərqli olaraq, bağlayan mötərizədən əvvəl əlavə vergül JSON üçün sintaksis səhvidir!
// SƏHV! (sonuncu vergül icazə verilmir)
{
"id": 10,
"name": "Oleg",
}
Doğru:
{
"id": 10,
"name": "Oleg"
}
Boşluqlar və sətir qırılmaları
Gözəllik üçün onları əlavə etmək olar, parser-lər onları görməzdən gəlir. İnsan üçün oxunan formatda adətən pretty-printed (formatlanmış) JSON istifadə olunur, şəbəkə üzərindən ötürüləndə isə minified (bir sətirdə, boşluqsuz) versiyası istifadə olunur.
4. C# obyektləri necə JSON-a çevrilir
Əgər obyektinizi serialize edirsinizsə System.Text.Json.JsonSerializer.Serialize() vasitəsilə, obyektin sahələri və property-ləri açar-dəyər cütlərinə çevrilir.
C# sinfi və serialize nümunəsi
public class Book
{
public string Title { get; set; }
public int Pages { get; set; }
}
var book = new Book { Title = "CLR via C#", Pages = 900 };
string json = JsonSerializer.Serialize(book);
Console.WriteLine(json); // {"Title":"CLR via C#","Pages":900}
Kolleksiyalar
- List<int> çevrilir [1,2,3]
- string[] çevrilir ["hi", "wow"]
- List<Person> — obyekt massivinə çevrilir
Sözlüklər (Dictionaries)
Sözlük nümunəsi Dictionary<string, int> obyektə çevrilir:
var dict = new Dictionary<string, int>
{
["apples"] = 5, ["bananas"] = 10
};
string json = JsonSerializer.Serialize(dict);
// {"apples":5,"bananas":10}
5. Visual sxem: JSON necə qurulur
İç-içəlik — matryoshka kimi
Obyekt
│
├── Cüt: "name": "Alex"
├── Cüt: "hobbies": massiv
│ │
│ ├── "skiing"
│ └── "programming"
└── Cüt: "profile": obyekt
│
├── "age": 42
└── "city": "Bazel"
Nəticədə:
{
"name": "Alex",
"hobbies": ["skiing", "programming"],
"profile": {
"age": 42,
"city": "Bazel"
}
}
6. Tipik səhvlər və sintaksis xüsusiyyətləri
Proqramlaşdırmada ideal dünya yoxdur — JSON-da da öz tələləri var! Əgər səhv dırnaqlar, əlavə vergüllər və ya dırnaqlarda olmayan açarlar ilə JSON göndərməyə çalışsanız — parser səhv verəcək.
Daha bir «tələyə» misal — ön sıfırlı ədədlər. JSON-da bu qadağandır (məsələn, 0123 — səhvdir).
Bilməyə dəyər: Bəzi parser-lər (məsələn, JavaScript-in JSON.parse) daha tolerantdır və kiçik pozuntulara «bağışlaya» bilər. Amma çoxluqla «sərt» parser-lər (məsələn, C# və .NET-də) ən kiçik sintaksis pozuntusuna görə də şikayət edəcəklər.
7. C# məlumatlarının JSON-a çevrilməsi nümunələri
Gəlin praktiki olaraq mürəkkəb struktur serialize edək. Tədris tətbiqimiz inkişaf edir: düşünək ki, indi bizdə tələbələr siyahısı var və onları JSON faylına saxlamaq istəyirik.
Sinfi təyin edək:
public class Student
{
public string Name { get; set; }
public int Age { get; set; }
}
Siyahını dolduraq:
var students = new List<Student>
{
new Student { Name = "Anna", Age = 20 },
new Student { Name = "Nikita", Age = 22 }
};
Serialize etmək:
using System.Text.Json;
// Student siyahısını JSON sətrinə serialize edirik
string json = JsonSerializer.Serialize(students, new JsonSerializerOptions { WriteIndented = true });
Console.WriteLine(json);
/*
[
{
"Name": "Anna",
"Age": 20
},
{
"Name": "Nikita",
"Age": 22
}
]
*/
Görürsünüz, hər tələbə JSON-massiv daxilində ayrıca obyekt kimidir.
8. Mini-generator: JSON-u "əl ilə" necə yazmaq
Bəzən JSON-u özünüz yazmalısınız, məsələn — test məlumatları əl ilə yaratmaq. Budur yoxlama siyahısı:
- Xarici qıvrılmış mötərizələr — obyekt üçün, xarici kvadrat — massiv üçün.
- Açar həmişə — ikiqat dırnaqlarda sətir.
- Dəyərlər — sətirlər (ikiqat dırnaqlarda), ədədlər, true, false, null, obyekt ({}), massiv ([]).
- Elementlər arasında yalnız vergüllər, sonuncudan sonra yox!
- Oxunaqlılıq üçün indentlər və boşluqlar (lakin mütləq deyil).
GO TO FULL VERSION