JavaRush /Курси /SQL SELF /Робота з JSON та JSONB

Робота з JSON та JSONB

SQL SELF
Рівень 33 , Лекція 0
Відкрита

Іноді структура даних не вкладається у звичні рядки й числа. Наприклад, користувач може мати список хобі, довільні налаштування профілю або вкладені параметри замовлення. Жорстко задавати під це окремі таблиці — незручно. Тут на допомогу приходить JSON.

PostgreSQL підтримує два формати для роботи з такими даними: JSON і JSONB. Обидва дозволяють зберігати структуровані дані всередині однієї колонки, але між ними є важливі відмінності.

Давай розберемося, як це працює, коли використовувати який формат і які можливості вони відкривають.

Що таке JSON

JSON (JavaScript Object Notation) — це текстовий формат обміну даними, який був створений для зручного представлення структурованих даних. Це формат, який чудово знайомий будь-якому розробнику, що працює з веб-додатками, і його можна описати як "зрозумілий для людини" і "легко парситься комп'ютером". У PostgreSQL цей формат використовується для зберігання та обробки структурованих даних.

Ось приклад JSON-об'єкта:

{
  "name": "Alex Lin",
  "age": 25,
  "skills": ["SQL", "PostgreSQL", "JavaScript"],
  "address": {
    "city": "Berlin",
    "postal_code": "10115"
  }
}

Примітка: JSON — це просто текст, але текст з правилами. Наприклад, імена ключів завжди беруться у лапки.

JSONB: Binary JSON

JSONB — це "бінарний JSON", який також підтримується PostgreSQL. На відміну від JSON, JSONB індексується і оптимізований для швидкого пошуку та змін. Основна різниця між JSON і JSONB у PostgreSQL полягає у способі їх зберігання:

  • JSON зберігається як текстовий рядок у тому вигляді, в якому ти передав дані.
  • JSONB перетворює дані у бінарний формат, який ефективніший для більшості операцій.

JSONB дає тобі такі фічі: фільтрація, індексація, порівняння складних вкладених структур.

Основні переваги JSONB

Чому варто обрати JSONB, а не JSON? Ось кілька причин:

  1. Прискорення пошуку та фільтрації

JSONB створений для швидкого витягування даних. Наприклад, якщо у тебе є великий масив об'єктів, JSONB дозволяє швидко знайти потрібний елемент без повного перебору.

  1. Можливість індексації

З індексацією ти можеш шукати по ключах і значеннях всередині JSONB, роблячи запити блискавичними. Розглядати JSON як текст (у форматі JSON) індексацію не дозволяє.

  1. Зручність роботи з вкладеними даними

JSONB круто працює з вкладеними структурами. Тобі не треба роздувати кількість таблиць для роботи з ієрархічними даними — все може бути компактно запаковано.

Коли використовувати JSON, а коли JSONB

  • JSON варто використовувати, якщо ти хочеш зберегти дані "як є" у текстовому вигляді. Наприклад, якщо важлива точна фіксація даних або потрібна мінімальна обробка.
  • JSONB стане у пригоді, якщо ти збираєшся активно робити вибірки, фільтрації та модифікації даних, або якщо потрібна індексація.

Приклади JSON-об'єктів

Давай розглянемо кілька прикладів JSON-об'єктів, щоб побачити можливості їх структури.

Простий JSON-об'єкт.

Структура ключ-значення:

{
  "name": "Kateryna",
  "age": 29
}

Масиви у JSON

JSON підтримує масиви:

{
  "skills": ["Python", "SQL", "Data Analysis"]
}

Вкладені об'єкти

JSON дозволяє створювати компоновки для зберігання складних даних:

{
  "name": "Andrii",
  "contacts": {
    "email": "andrey@example.com",
    "phone": "+79012345678"
  }
}

Комбінування масивів та об'єктів

Ти можеш комбінувати масиви й об'єкти:

{
  "team": [
    {
      "name": "Olena",
      "role": "menedzher"
    },
    {
      "name": "Pavlo",
      "role": "rozrobnyk"
    }
  ]
}

JSON і PostgreSQL

PostgreSQL підтримує два окремих типи даних для роботи з JSON:

  • JSON: текстовий формат.
  • JSONB: бінарний формат.

Створення таблиці з колонками JSON та JSONB

Подивимось, як можна використовувати JSON/JSONB у таблицях PostgreSQL. Наприклад, створимо таблицю для зберігання інформації про співробітників компанії:

-- Створюємо таблицю з колонками JSON та JSONB
CREATE TABLE employees (
    id SERIAL PRIMARY KEY,
    name TEXT NOT NULL,
    details JSON,    -- текстовий JSON
    profile JSONB    -- бінарний JSON
);

На перший погляд здається, що різниці між цими колонками немає. Але це не так: JSON ідеально підходить для зберігання даних у незмінному вигляді, а JSONB краще для фільтрації та пошуку.

-- Вставляємо дані
INSERT INTO employees (name, details, profile)
VALUES
('Alex Lin', '{"age": 30, "city": "Tallinn"}', '{"skills": ["SQL", "PostgreSQL"], "hobby": "football"}'),
('Maya Novak', '{"age": 25, "city": "Riga"}', '{"skills": ["Python", "Machine Learning"], "hobby": "reading"}');

Витягування JSONB-даних

Ти можеш витягувати дані з JSONB за допомогою спеціальних функцій, які ми розглянемо у наступній лекції. Наприклад, щоб дізнатися про навички співробітників:

-- Витягування навичок
SELECT name, profile->'skills' AS skills
FROM employees;

Результат:

name skills
Alex Lin ["SQL", "PostgreSQL"]
Maya Novak ["Python", "Machine Learning"]

Застосування JSON у реальному житті

JSON (і JSONB) широко використовується у реальних додатках. Ось кілька прикладів:

  1. API та мікросервіси. JSON є стандартним форматом передачі даних у RESTful API. PostgreSQL підтримує його на рівні зберігання та обробки.
  2. Інтеграція даних. Якщо твоя база даних отримує дані з різних систем, працювати з JSONB буде зручніше.
  3. Володіння складними структурами. Наприклад, JSONB підходить для зберігання даних анкет, користувацьких налаштувань або корпоративних метаданих.
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ