1. Що таке JSON (JavaScript Object Notation)?
JSON (читається як «джейсон», а не «жесон»!) розшифровується як JavaScript Object Notation. Попри слово «JavaScript» у назві, JSON — це універсальний формат, який підтримують майже всі мови програмування, зокрема Java.
JSON запропонував Дуглас Крокфорд на початку 2000-х як простий спосіб обміну даними між браузером і сервером. До нього домінував XML — багатослівний і перевантажений тегами.
JSON виявився компактнішим, простішим і легко читаним для людини. Він швидко став стандартом де-факто для обміну даними між клієнтом і сервером, особливо у вебі та мобільних застосунках.
Чому JSON став стандартом?
- Простий синтаксис — легко писати й читати вручну.
- Компактність — немає зайвих тегів і «води».
- Зручність читання — навіть гуманітарій зрозуміє, що відбувається.
- Легкість парсингу — більшість мов мають вбудовані/сторонні бібліотеки.
- Міжмовність — Java, Python, Kotlin тощо — JSON підтримують усі.
- Стандарт для REST API — переважна більшість API повертають JSON.
Порівняння з XML
| JSON | XML | |
|---|---|---|
| Читабельність | Дуже висока | Середня (багато тегів) |
| Розмір | Компактний | Більш громіздкий |
| Парсинг | Простий | Потребує більше зусиль |
| Розширюваність | Підтримує вкладеність | Підтримує вкладеність |
| Суворість | Менш формальний | Можна описувати схеми |
| Популярність (2020+) | Дуже висока | Використовується, але рідше |
Перевага — за JSON майже за всіма пунктами. Втім, XML залишається актуальним там, де потрібні складні схеми, сувора типізація, валідація за XSD, підтримка коментарів і атрибутів — наприклад, у застарілих системах і банківському ПЗ.
На практиці, якщо ви не пишете ПЗ для банку або космічного корабля, — використовуйте JSON.
2. Базовий синтаксис JSON
Якщо ви працювали з об’єктами JavaScript або словниками в інших мовах, синтаксис видасться знайомим. У Java прямого «словника» немає, його роль виконують колекції з java.util, насамперед Map<K, V> (найчастіше — HashMap<K, V>).
Основні елементи
- Об’єкти — набір пар «ключ: значення», укладених у { }.
- Масиви — впорядковані списки значень, укладені в [ ].
Приклад об’єкта:
{
"name": "Alice",
"age": 25
}
Приклад масиву:
[1, 2, 3, 4, 5]
Приклад об’єкта з масивом:
{
"students": [
"Ivan",
"Maria",
"John"
]
}
Допустимі типи значень
У JSON можна використовувати лише такі типи даних:
| Тип | Приклад | Опис |
|---|---|---|
| Рядок | |
Завжди у подвійних лапках |
| Число | |
Цілі та дробові |
| Булеве | |
Логічні значення |
| null | |
«Порожньо», відсутність значення |
| Об’єкт | |
Набір пар «ключ: значення» |
| Масив | |
Список значень |
Увага: ключі в об’єктах — це завжди рядки в подвійних лапках, наприклад "name". Одинарні лапки не допускаються.
Приклади валідного JSON
{
"id": 1,
"name": "Bob",
"active": true,
"scores": [10, 20, 30],
"profile": {
"email": "bob@example.com",
"phone": null
}
}
Приклад невалідного JSON (помилки)
{
name: 'Bob', // Помилка: ключі та рядки — лише в подвійних лапках!
age: 25,
}
3. Структура даних: вкладеність об’єктів і масивів
JSON підтримує глибоку вкладеність: об’єкти в об’єктах, масиви в об’єктах, об’єкти в масивах тощо. Це як матрьошка.
Приклад складного JSON-документа
{
"university": "Java University",
"students": [
{
"name": "Ivan",
"age": 20,
"courses": ["Math", "Java", "English"]
},
{
"name": "Maria",
"age": 19,
"courses": ["Biology", "Java", "Art"]
}
],
"active": true
}
У кореневому об’єкті є рядкове поле "university", булеве поле "active" та масив "students", у якому лежать об’єкти студентів.
Візуальна схема (блок-схема)
{
"ключ": значення,
"масив": [
{ "ключ": значення },
{ "ключ": значення }
],
"об’єкт": {
"ключ": значення
}
}
4. Переваги JSON
Чому JSON такий популярний?
- Легко читається людиною й машиною — структуру легко зрозуміти.
- Компактність — мінімум зайвих символів.
- Простота парсингу — безліч бібліотек для читання/запису.
- Стандарт для REST API та мобільних застосунків — повсюдно використовується.
- Гнучкість — описує як прості списки, так і деревоподібні структури.
- Конфіги, налаштування, зберігання даних — часто використовується в конфігураціях.
- Підтримка всіма мовами — Java, Python, Go, Rust тощо.
5. Практика: розбір прикладів JSON-файлів
Приклад 1: Список користувачів
[
{
"id": 1,
"name": "Alice"
},
{
"id": 2,
"name": "Bob"
}
]
Це масив, де кожен елемент — об’єкт користувача.
Приклад 2: Конфігурація застосунку
{
"debug": true,
"maxConnections": 100,
"database": {
"host": "localhost",
"port": 5432,
"user": "admin",
"password": "qwerty"
}
}
Об’єкт із вкладеним об’єктом "database". Дуже схоже на реальні налаштування застосунків.
Приклад 3: Помилки в JSON
{
"name": "Alice",
"age": 25,
} // Помилка: зайва кома перед закривною фігурною дужкою!
Запам’ятайте: у JSON не можна ставити кому після останнього елемента.
Приклад 4: Ключі без лапок
{ name: "Alice", age: 25 } // Помилка: ключі мають бути в подвійних лапках!
6. Корисні нюанси
Таблиця: що можна і чого не можна в JSON
| Можна | Не можна |
|---|---|
|
|
|
|
|
|
|
|
|
|
Коротке порівняння JSON і Java-об’єктів
| Java | JSON |
|---|---|
|
Число, true/false |
|
"рядок" |
| List<T>, масив | [значення1, значення2, ...] |
|
{ "ключ": значення, ... } |
|
null |
| Клас із полями | { "поле": значення, ... } |
Приклад: Java-клас і його JSON-подання
public class Student {
public String name;
public int age;
}
{
"name": "Alice",
"age": 20
}
7. Типові помилки під час роботи з JSON
Помилка № 1: Одинарні лапки замість подвійних. JSON підтримує лише подвійні лапки для ключів і рядків.
{ 'name': 'Alice' } // Помилка!
Помилка № 2: Зайва кома. Не можна ставити кому після останнього елемента.
{ "name": "Alice", } // Помилка!
Помилка № 3: Ключі без лапок. Ключі завжди мають бути в подвійних лапках.
{ name: "Alice" } // Помилка!
Помилка № 4: Числа з провідними нулями. Такі числа недопустимі.
{ "age": 025 } // Помилка!
Помилка № 5: Використання undefined. У JSON немає undefined, використовуйте null.
{ "value": undefined } // Помилка!
Помилка № 6: True/False з великої літери. У JSON тільки true і false (малими).
{ "active": True } // Помилка!
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ