Используя MS SQL Server 2017, у меня есть 2 таблицы:
Моя цель — создать JSON, который включает в себя массив строк, содержащий номера займов организации.
Я использую SQL в следующих строках:
SELECT
OrganizationID,
( SELECT '[' + STRING_AGG('''' + Loan + '''', ',') + ']'
FROM Loan
WHERE Loan.OrganizationID = Organization.OrganizationID
) AS [Loans]
FROM Organization
WHERE OrganizationID = 1
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER;
и я бы нравится получать это:
{
"OrganizationID": 1,
"Loans": ['Test 001','Test Loan 123','Test Loan 234']
}
Однако то, что я на самом деле получить, заключает значение Loans в кавычки:
{
"OrganizationID": 1,
"Loans": "['Test 001','Test Loan 123','Test Loan 234']"
}
Я понимаю, что могу сделать это:
SELECT
OrganizationID,
( SELECT Loan
FROM Loan
WHERE Loan.OrganizationID = Organization.OrganizationID
FOR JSON PATH
) AS [Loans]
FROM Organization
WHERE OrganizationID = 1
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER;
чтобы произвести это:
{
"OrganizationID": 1,
"Loans": [{
"Loan": "Test 001"
}, {
"Loan": "Test Loan 123"
}, {
"Loan": "Test Loan 234"
}]
}
Однако мое требование состоит в том, чтобы создать простой массив строк, а не массив объектов Loan.
Мы будем очень признательны за предложения по формированию JSON!


В строках JSON в качестве разделителя используется ", а не '. Кроме того, мы должны позаботиться о побеге (на всякий случай). Имея это в виду, JSON_QUERY поможет нам:
SELECT
OrganizationID,
JSON_QUERY((
SELECT '[' + STRING_AGG('"' + STRING_ESCAPE(Loan, 'json') + '"', ',') + ']'
FROM Loan
WHERE Loan.OrganizationID = Organization.OrganizationID
)) AS [Loans]
FROM Organization
WHERE OrganizationID = 1
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER;