Как преобразовать таблицу результатов в массив JSON в MySQL
Я хотел бы преобразовать таблицу результатов в массив JSON в MySQL, используя предпочтительно только простые команды MySQL. Например, с запросом
SELECT name, phone FROM person;
| name | phone |
| Jack | 12345 |
| John | 23455 |
ожидаемый вывод JSON будет
[
{
"name": "Jack",
"phone": 12345
},
{
"name": "John",
"phone": 23455
}
]
Есть ли способ сделать это в простой MySQL?
EDIT:
Есть несколько ответов, как это сделать, например. MySQL и PHP, но я не смог найти чистое решение MySQL.
Ответы
Ответ 1
Новое решение:
Создан с использованием Ваших замечательных комментариев, спасибо!
SELECT JSON_ARRAYAGG(JSON_OBJECT('name', name, 'phone', phone)) from Person;
Старое решение:
С помощью @Schwern мне удалось поставить этот запрос, который, кажется, работает!
SELECT CONCAT(
'[',
GROUP_CONCAT(JSON_OBJECT('name', name, 'phone', phone)),
']'
)
FROM person;
Ответ 2
Вы можете использовать json_object, чтобы получить строки как объекты JSON.
SELECT json_object('name', name, 'phone', phone)
FROM person;
Это не будет помещать их в массив или помещать запятые между ними. Вы должны будете сделать это в коде, который их извлекает.
Ответ 3
Если вы выполняете свои запросы в консоли (как вы говорите в одном из комментариев), установите MySql Shell, и вы сможете выводить результаты запросов в виде json.
Ответ 4
Для JSON есть две функции "сгруппировать", которые называются json_arrayagg, json_objectagg.
Эта проблема может быть решена с помощью:
SELECT json_arrayagg( json_merge( json_object('name', name), json_object('phone', phone) ) ) FROM person;
Для этого требуется MySQL 5. 7+.