1. Введение
Если вы хоть раз открывали современные API, работали с web-сервисами, мобильными приложениями или даже просто пытались сохранить что-то в "универсальном формате" — вы уже сталкивались или столкнётесь с 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, приложение может ощутимо просесть по производительности.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ