Аналог JSON_TABLE в MYSQL, чтобы ключи были одним из столбцов?

В некоторых сценариях мне нужно из столбца с json-данными построить таблицу.
Вот, к примеру, объект: {"1": 2, "2": 4, "3": 1, "4": [2, 3, 6]}. Все ключи уникальны между собой. Вложенных объектов нет.
Как проще всего через их нативные команды построить такую таблицу:
1 2
2 4
3 1
4 2
4 3
4 6


При использовании JSON_TABLE работа ведётся только со значениями, а ключи наоборот должны быть неуникальны, то есть чтобы построить таблицу через такую функцию, нужно иметь следующий исходный массив:
[{"key": 1, "value: 2}, {"key": 2, "value": 4}].

Как-то можно проще построить таблицу с уникальными ключами? Я не нашёл команды такой же простой и можно сказать обратной команде JSON_OBJECTAGG. Мне нужно выполнить команду обратно противоположную JSON_OBJECTAGG. Столбец1 - ключ, столбец2 - значение.

Неужели нужно работать в цикле с каждой парой через JSON_KEY и JSON_EXTRACT, и только так формировать строки таблицы?
  • Вопрос задан
  • 220 просмотров
Решения вопроса 1
Неужели нужно работать в цикле с каждой парой через JSON_KEY и JSON_EXTRACT, и только так формировать строки таблицы?
Поскольку выбрана именно такая структура данных в JSON, то средствами SQL только так.

Попробуйте

[{"key": 1, "value: 2}, {"key": 2, "value": 4}]

Такая структура позволяет использовать JSON_TABLE. Тогда получится список (id, key, value) с одинаковыми id.
Однако, если исходя из задачи Как строить архитектуру БД, где у юзеров много полей? требуется получить список вопросов с их ответами по user_id, то проще раскодировать JSON на стороне клиента СУБД, в самой программе, занеся в соответствующие модели, без использования JSON_TABLE.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
AlexXYZ
@AlexXYZ
O Keep Clear O
Все ключи уникальны между собой

Это лишнее уточнение, т.к. в object все ключи уникальны по определению. Одинаковых ключей не бывает в принципе.
Что касается простоты, то сам json является простым форматом, но не сценарии, в которых он может быть применён. То что вы написали не является стандартным способом работы с Json, который входит в набор его базовых функций - типа получить ключи или значение по ключу или длину массива элемента. Поэтому даже сценарий получения такого списка «ключ-значение», как у вас должен писаться. Увы.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы