Как преобразовать таблицу результатов в массив 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+.