#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