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": "Екатерина",
  "age": 29
}

Массивы в JSON

JSON поддерживает массивы:

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

Вложенные объекты

JSON позволяет создавать компоновки для хранения сложных данных:

{
  "name": "Андрей",
  "contacts": {
    "email": "andrey@example.com",
    "phone": "+79012345678"
  }
}

Комбинирование массивов и объектов

Вы можете комбинировать массивы и объекты:

{
  "team": [
    {
      "name": "Елена",
      "role": "менеджер"
    },
    {
      "name": "Павел",
      "role": "разработчик"
    }
  ]
}

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 подходит для хранения данных анкет, пользовательских настроек или корпоративных метаданных.
2
Задача
SQL SELF, 33 уровень, 0 лекция
Недоступна
Создание таблицы с JSONB
Создание таблицы с JSONB
Комментарии (1)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Анатолий Уровень 49
18 февраля 2026
❤️