1. Що таке JSON і чому він став стандартом
Формат JSON (JavaScript Object Notation) є універсальним стандартом для обміну структурованими даними між вебсерверами, клієнтськими застосунками, базами даних та сучасними AI-агентами.
Коли комп'ютерні програми взаємодіють між собою, передавати інформацію звичайним неструктурованим текстом неефективно:
«Олена Ковальчук, 29 років, Київ, преміум-підписка активна, навички: Python, SQL.»
Людина легко зрозуміє цей опис, але алгоритм витратить значні ресурси на розпізнавання сутностей. У форматі JSON ті самі дані виглядають суворо та детерміновано:
Будь-який парсер на будь-якій мові програмування (JavaScript, Python, Go, Rust) миттєво зчитає ключ "city" та отримає значення "Київ" без двозначностей.
Чому JSON не залежить від JavaScript
Попри свою назву, JSON є абсолютно мовно-незалежним текстовим форматом. Він має власний RFC-стандарт (RFC 8259) та підтримується всіма сучасними екосистемами через стандартний MIME-тип application/json.
2. Анатомія JSON: синтаксис об’єктів, масивів та примітивів
Усі дані у форматі JSON будуються навколо двох ключових контейнерів (об'єктів і масивів) та шести базових типів значень.
Об’єкт (JSON Object)
Об'єкт представляє невпорядкований набір пар ключ: значення, що обов'язково беруться у фігурні дужки {}. Ключем завжди має бути текстовий рядок у подвійних лапках.
Синтаксична діаграма об'єкта JSONМасив (JSON Array)
Масив — це впорядкований список значень будь-якого типу, взятий у квадратні дужки []. Елементи масиву індексуються з нуля.
Синтаксична діаграма масиву JSONДопустимі типи значень (Values)
У JSON дозволено використовувати рівно 6 типів значень:
Допустимі типи значень у специфікації JSON| Тип значення | Опис та правила запису | Приклад |
|---|---|---|
| Рядок (String) | Послідовність символів Unicode у подвійних лапках | "Hello, World!" |
| Число (Number) | Ціле або дробове число (без лапок, без шістнадцяткових) | 42, -12.5, 1.5e3 |
| Логічне (Boolean) | Тільки символи в нижньому регістрі: true або false | true, false |
| Null | Позначення свідомої відсутності значення | null |
| Об'єкт (Object) | Вкладений контейнер пар ключ-значення | {"nested": true} |
| Масив (Array) | Вкладений список елементів | [1, 2, 3] |
3. Суворі правила синтаксису та типові пастки
Синтаксис JSON набагато суворіший, ніж гнучкий синтаксис JavaScript або Python. Помилка навіть в одному символі ламає валідацію всього документа.
П'ять головних правил синтаксису
- Тільки подвійні лапки: Ключі та текстові рядки зобов'язані бути в
"подвійних лапках". Одинарні лапки'text'викликають фатальну помилку парсера. - Жодних висячих ком (Trailing Commas): Після останнього елемента об'єкта або масиву ставити кому категорично заборонено.
- Двокрапка як єдиний роздільник: Ключ відокремлюється від значення виключно двокрапкою
:. - Повна відсутність коментарів: Специфікація JSON не підтримує коментарі
//чи/* */. Будь-які пояснення мають оформлюватися як звичайні поля документа (наприклад,"_comment": "Пояснення"). - Заборонені типи даних: У JSON не можна передавати
undefined,NaN,Infinity, регулярні вирази чи функції.
Порівняння валідного та невалідного JSON
4. Відмінності між JSON та об’єктами JavaScript
Початківці часто плутають об'єктний літерал JavaScript і формат JSON. Проте між ними є принципова різниця.
Таблиця фундаментальних відмінностей
| Характеристика | Об'єкт JavaScript | JSON (Текстовий формат) |
|---|---|---|
| Форма існування | Жива структура даних в оперативній пам'яті | Текстовий рядок (послідовність байтів) |
| Вимоги до ключів | Можуть бути без лапок або Symbol | Обов'язково рядки у подвійних лапках |
| Підтримувані типи | Функції, методи, Date, Map, Set, undefined | Лише 6 базових типів (рядки, числа, bool, null, obj, arr) |
| Коментарі | Дозволені // та /* */ | Повністю заборонені |
| Висячі коми | Дозволені сучасними стандартами JS | Суворо заборонені стандартом |
5. Навігація та читання вкладених структур даних
У реальних проєктах відповіді API містять глибокі ієрархічні структури. Для доступу до конкретного значення застосовують точкову нотацію (.) для об'єктів та індекси ([]) для масивів.
Приклад складного документа
Шляхи звернення до елементів
order.orderId$\rightarrow$ повертає"ORD-94821"order.customer.fullName$\rightarrow$ повертає"Тарас Шевченко"order.customer.contacts.phones[0]$\rightarrow$ повертає перший номер"+380501112233"order.items[1].price$\rightarrow$ повертає ціну другого товару120
У сучасному JavaScript для запобігання помилкам TypeError: Cannot read properties of undefined завжди використовуйте опціональні ланцюжки: order?.customer?.contacts?.email.
6. JSON у REST API: запити, відповіді та заголовки
Практично всі сучасні вебсервіси використовують JSON як протокол передачі корисного навантаження (Payload) через протокол HTTP.
Ключові HTTP-заголовки
Content-Type: application/json: вказує серверу або клієнту, що в тілі запиту (Request Body) або відповіді (Response Body) передається валідний JSON-рядок.Accept: application/json: клієнт повідомляє серверу, що очікує отримати відповідь виключно у форматі JSON (а не XML чи HTML).
7. Серіалізація та десеріалізація: parse і stringify
Перетворення живих об'єктів пам'яті на текст називається серіалізацією (Serialization), а зворотне перетворення тексту на об'єкт — десеріалізацією (Deserialization).
\n
8. Діагностика помилок синтаксису та валідація
Якщо текст містить хоча б одну синтаксичну помилку, виклик JSON.parse() викидає виняток SyntaxError, що може аварійно зупинити роботу додатку.
Чек-лист швидкої діагностики
- Чи закриті всі фігурні
{}та квадратні[]дужки? - Чи всі ключі взяті саме у подвійні лапки
""? - Чи немає висячої коми перед останньою дужкою?
- Чи не потрапили до тексту значення
undefined,NaNабо коментарі? - Чи екрановані внутрішні лапки у рядках:
"quote": "Слово \"у лапках\""?
9. JSON Schema: перевірка контрактів і структури
Синтаксично коректний JSON ще не гарантує, що дані мають правильну бізнес-структуру. Якщо API очікує число age, а отримує рядок "двадцять", програма впаде на етапі обчислень.
Для формального опису вимог до структури використовується стандарт JSON Schema.
Будь-який валідатор (наприклад, Ajv у JavaScript чи jsonschema у Python) автоматично перевірить вхідні дані за цим контрактом ще до передачі в базу даних.
10. Структуровані дані для LLM, виклику функцій та AI-агентів
У сучасній розробці зі штучним інтелектом текстові відповіді у вільному форматі поступово поступаються місцем Structured Outputs.
AI-агенти (наприклад, Claude Code, OpenAI Function Calling, LangChain) використовують JSON для виклику зовнішніх інструментів:
Як гарантувати повернення чистого JSON від мовної моделі
- Вказуйте схему у системному промпті: Завжди передавайте точну TypeScript-модель або JSON Schema.
- Вимагайте сирий вивід: Використовуйте інструкцію: "Return ONLY a valid raw JSON object. Do not wrap in markdown code blocks or add introductory text."
- Використовуйте режим Structured Outputs: У провайдерів API (Anthropic Tool Use / OpenAI JSON Mode) вмикайте примусову схему валідації на рівні генератора токенів.
11. Порівняння форматів: JSON, YAML, XML та TOML
| Формат | Читабельність людиною | Підтримка коментарів | Обсяг розмітки | Основна сфера застосування |
|---|---|---|---|---|
| JSON | Середня / Висока | Ні | Мінімальний | Web API, клієнт-серверний зв'язок, виклики AI |
| YAML | Дуже висока | Так | Нульовий (відступи) | Конфігурації CI/CD (GitHub Actions, K8s) |
| TOML | Дуже висока | Так | Низький | Конфігурації проєктів (Cargo, pyproject.toml) |
| XML | Низька | Так | Високий (теги) | Спадкові enterprise-системи, SOAP, SVG |
12. Практичний воркшоп, самоперевірка та підсумковий чек-лист
Закріпимо всі здобуті навички на повному циклі: від отримання даних з API до валідації та читання.
Повний сценарій отримання та читання даних
Швидка самоперевірка
1. Яка помилка виникне, якщо у файлі JSON використати одинарні лапки для рядка?
Відповідь: Станеться помилка парсингу
SyntaxError: Unexpected token ' in JSON. Специфікація JSON дозволяє виключно подвійні лапки"".
2. Чому після останнього елемента в об'єкті JSON не можна ставити кому?
Відповідь: Стандарт JSON забороняє висячі коми (trailing commas). Парсер очікує після коми наступну пару ключ-значення, і якщо знаходить закриваючу дужку
}, виникає фатальна помилка синтаксису.
3. Для чого потрібен стандарт JSON Schema?
Відповідь: Щоб перевіряти бізнес-структуру та типи даних у документі (наявність обов'язкових полів, мінімальні значення чисел, формат email), а не лише базову валідність синтаксису.
Підсумковий чек-лист роботи з JSON
- Усі рядки та ключі оформлено у подвійних лапках
"". - Перевірено відсутність висячих ком перед
}та]. - Вилучено всі коментарі з тіла JSON-документа.
- Під час передачі мережею встановлено заголовок
Content-Type: application/json. - Усі операції
JSON.parse()захищено блокомtry/catch. - Для складних інтеграцій та AI-агентів створено контракт валідації через
JSON Schema.