JavaRush /Курси /JAVA 25 SELF /Основи JSON: структура, синтаксис, переваги

Основи JSON: структура, синтаксис, переваги

JAVA 25 SELF
Рівень 46 , Лекція 0
Відкрита

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 можна використовувати лише такі типи даних:

Тип Приклад Опис
Рядок
"hello"
Завжди у подвійних лапках
Число
123, 3.14, -7
Цілі та дробові
Булеве
true, false
Логічні значення
null
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 такий популярний?

  1. Легко читається людиною й машиною — структуру легко зрозуміти.
  2. Компактність — мінімум зайвих символів.
  3. Простота парсингу — безліч бібліотек для читання/запису.
  4. Стандарт для REST API та мобільних застосунків — повсюдно використовується.
  5. Гнучкість — описує як прості списки, так і деревоподібні структури.
  6. Конфіги, налаштування, зберігання даних — часто використовується в конфігураціях.
  7. Підтримка всіма мовами — 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

Можна Не можна
"ключ": "значення"
'ключ': 'значення'
"ключ": 123
"ключ": 0123
"ключ": null
"ключ": undefined
"ключ": true
"ключ": True
"ключ": [1, 2, 3]
"ключ": [1, 2, 3,]

Коротке порівняння JSON і Java-об’єктів

Java JSON
int, double, boolean
Число, true/false
String
"рядок"
List<T>, масив [значення1, значення2, ...]
Map<String, Object>
{ "ключ": значення, ... }
null
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 } // Помилка!
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ