CodeGym /Kurslar /C# SELF /JSON sintaksisi və strukturu əsasları

JSON sintaksisi və strukturu əsasları JSON

C# SELF
Səviyyə , Dərs
Mövcuddur

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)
10, -5, 3.14
Tam və ya onluq ədəd
Sətir (String)
"hello"
Həmişə ikiqat dırnaqlarda
Boolean (Boolean)
true, false
Məntiqi dəyər
null
null
Dəyərin olmaması
Obyekt (Object)
{"a":1}
Sözlük və ya sahələri olan entitə
Massiv (Array)
[1,2,3]
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ı:

  1. Xarici qıvrılmış mötərizələr — obyekt üçün, xarici kvadrat — massiv üçün.
  2. Açar həmişə — ikiqat dırnaqlarda sətir.
  3. Dəyərlər — sətirlər (ikiqat dırnaqlarda), ədədlər, true, false, null, obyekt ({}), massiv ([]).
  4. Elementlər arasında yalnız vergüllər, sonuncudan sonra yox!
  5. Oxunaqlılıq üçün indentlər və boşluqlar (lakin mütləq deyil).
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION