Получить массив строк в формате JSON с помощью MySQL

#mysql #arrays #json

#mysql #массивы #json

Вопрос:

Я хочу, чтобы MySQL возвращал результирующий набор в виде массива JSON.

Отработанный запрос:

 SELECT CONCAT(
    '[',
        GROUP_CONCAT(
            JSON_OBJECT(
                'ProductId', tblproducts.ProductId,
                'ProductName', tblproducts.ProductName
            )
        ),
    ']') As Products
FROM tblproducts;
  

Этот запрос возвращает следующий массив JSON:

 [
    {
        "ProductId": "1",
        "ProductName": "Milk"
    },
    {
        "ProductId": "2",
        "ProductName": "Bread"
    }
]
  

Хотя этот код работает, у меня есть сильное ощущение, что построение массива JSON с помощью GROUP_CONCAT и CONCAT является своего рода обходным путем. Если использовать a JSON_ARRAY , результирующий набор будет состоять из массивов JSON для каждого JSON_OBJECT .

Есть ли какой-либо собственный способ получить один массив JSON со всеми JSON_OBJECT в результирующем наборе?

Ответ №1:

JSON_ARRAYAGG() это может быть то, что вы ищете.

 SELECT JSON_ARRAYAGG(
    JSON_OBJECT(
        'ProductId', tblproducts.ProductId,
        'ProductName', tblproducts.ProductName
    )
) FROM tblproducts;
  

Вот пример: https://www.db-fiddle.com/f/uQ9UC7MDZM4gncNjViTsKw/0