SQL FOR JSON, испускающий простые массивы

Используя MS SQL Server 2017, у меня есть 2 таблицы:

  • Ссуда: столбцы включают Ссуду, OrganizationID
  • Организация: столбцы включают OrganizationID

Моя цель — создать 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!

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
4
0
228
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В строках 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;

Другие вопросы по теме