1. Вступ
Якщо ви хоч раз відкривали сучасні API, працювали з веб‑сервісами, мобільними застосунками або навіть просто намагалися зберегти щось у «універсальному форматі», ви вже стикалися або точно стикнетеся з JSON. Це формат, що буквально «зʼєднує» різні мови програмування й навіть різні платформи: C#, JavaScript, Python — усі «говорять» за допомогою JSON.
Чому саме JSON став зіркою серіалізації? Відповідь проста: це компактний, людиночитний і легкий текстовий формат обміну структурованими даними. Його популярність — результат вдалого поєднання простоти, універсальності та широкої підтримки в мовах програмування.
Що таке JSON?
JSON — це скорочення від JavaScript Object Notation. Формат народився у світі JavaScript, але дуже швидко вийшов за межі браузерів. Важливо: попри походження назви, JSON не привʼязаний до JavaScript і однаково зручний для всіх мов програмування.
Формат зʼявився на початку 2000‑х завдяки Дугласу Крокфорду як простіша альтернатива багатослівному XML. Ідея проста: «JSON коротший, простіший і його легше читати очима».
2. Основні правила JSON‑формату
Головне: JSON — чітко визначений текстовий формат для структурованих даних. Жодної магії — лише звичайний текст, який можна відкрити в будь‑якому редакторі.
Базові конструкції:
- Масиви (arrays): впорядковані списки значень.
- Обʼєкти (objects): набори пар ключ‑значення.
- Прості типи: рядки, числа, булеві значення (true, false) і спеціальне значення null.
Приклад мінімального JSON‑документа:
{
"name": "Іван",
"age": 25,
"isStudent": true,
"scores": [5, 4, 5, 3],
"contacts": {
"email": "ivan@example.com",
"phone": null
}
}
Схематична структура
Ось проста таблиця відповідностей типів C# і подання в JSON:
| Тип C# | Приклад JSON |
|---|---|
|
|
|
|
|
|
| масив (int[], ...) | |
| обʼєкт (class, ...) | |
|
|
Правила запису JSON
- Рядки завжди у подвійних лапках: 'text' — помилка, правильно "text".
- Ключі обʼєктів — рядки у подвійних лапках: наприклад, "name": ...
- Коми ставимо лише між елементами, без завершальної коми після останнього елемента.
- Відступи необовʼязкові, але полегшують читання.
- Числа без лапок: "age": 25, а не "age": "25".
- Булеві значення — true/false (без лапок), не True, FALSE або "true".
- null пишеться як null (без лапок).
3. JSON очима програміста
Аналогії з типами C#:
- JSON‑обʼєкт ≈ Dictionary<string, object>
- JSON‑масив ≈ T[] або List<T>
- JSON‑рядок ≈ звичайний рядок
- JSON‑число ≈ int або double (залежно від значення)
Приклад серіалізації обʼєкта в JSON
Клас:
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>();
}
Отриманий JSON (спростимо, деталі серіалізації далі):
{
"Name": "Іван",
"Age": 25,
"IsStudent": true,
"Scores": [5, 4, 5, 3]
}
4. Приклади допустимих JSON‑структур
Обʼєкт із масивом і вкладеними обʼєктами
{
"product": "Кава",
"price": 125.50,
"inStock": true,
"attributes": {
"weight": 500,
"unit": "г"
},
"tags": ["напій", "енергія", "арабіка"],
"promotions": null
}
Масив обʼєктів
[
{"id": 1, "name": "Петро"},
{"id": 2, "name": "Марія"},
{"id": 3, "name": "Василь"}
]
5. Приклади недопустимого JSON (і чому)
Одинарні лапки:
{ 'name': 'Іван' } // Помилка!
У JSON дозволені лише подвійні лапки.
Кома після останнього елемента:
{ "x": 1, "y": 2, } // Помилка!
Зайва кома наприкінці недопустима.
Коментарі:
{
// На жаль, так у JSON не працює
"name": "Іван"
}
У JSON коментарі не підтримуються.
6. Навіщо потрібен JSON у реальних проєктах?
Передача даних між системами
JSON — універсальна «спільна мова» між різними програмами, найчастіше поверх HTTP. Наприклад, сервер на C# спілкується з фронтендом на JavaScript — їхній спільний формат — JSON.
Зберігання налаштувань і даних
Багато застосунків зберігають налаштування в .json‑файлах. Наприклад, appsettings.json — стандарт для .NET‑застосунків. Переваги: легко прочитати, змінити й відстежувати зміни.
Серверні та мобільні API
Більшість REST API використовують JSON як формат запиту й відповіді: наприклад, список користувачів приходить як масив обʼєктів.
Конфігурація інструментів і бібліотек
Багато інструментів у .NET (Serilog, Swagger та ін.) використовують JSON для конфігурацій. XML трапляється дедалі рідше — JSON компактніший і зрозуміліший.
7. Популярність JSON: чому всі його так люблять?
- Читабельність. Навіть людина без досвіду програмування розбереться, що до чого.
- Зручно передавати мережею. Звичайний текст, мало «ваги».
- Підтримка в усіх мовах. Серіалізація та десеріалізація доступні відразу.
- Зручний для конфігурацій. Будь‑які редактори чудово з ним працюють.
- Легкість генерації. Генерувати JSON легко.
- Масиви, вкладеність, null. Усе інтуїтивно, без «дужкової лихоманки», як у XML.
Коли краще обрати JSON?
- Робите мобільний або веб‑застосунок;
- Працюєте з API зовнішніх сервісів;
- Хочете зробити застосунок дружнім до майбутніх інтеграцій.
8. Як C# працює з JSON
Коротко про популярні бібліотеки .NET:
- System.Text.Json — стандартна, швидка й проста.
- Newtonsoft.Json (Json.NET) — «ветеран» із величезним набором можливостей.
Мінімальний приклад серіалізації/десеріалізації:
using System.Text.Json;
// Перетворюємо обʼєкт на JSON-рядок
var student = new Student { Name = "Іван", Age = 25, IsStudent = true, Scores = new[] {5, 4, 5, 3} };
string json = JsonSerializer.Serialize(student);
// І навпаки: читаємо обʼєкт із JSON-рядка
Student? parsed = JsonSerializer.Deserialize<Student>(json);
Console.WriteLine(json);
9. Типові помилки новачків під час роботи з JSON
Поширена помилка — переплутати лапки або забути кому. Інколи намагаються додати коментарі (як у C# — це ж зручно!), але JSON цього не дозволяє.
Ще одна часта ситуація — серіалізація обʼєктів із неініціалізованими колекціями: у результаті ви отримуєте "scores": null замість очікуваного масиву. Ініціалізуйте колекції заздалегідь.
Памʼятайте, що JSON — це текст: великі обсяги даних займають багато памʼяті. Якщо серіалізувати умовні 500 МБ у JSON, застосунок може суттєво втратити в продуктивності.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ