用于发出简单数组的JSON的SQL

用于发出简单数组的JSON的SQL,sql,json,sql-server,Sql,Json,Sql Server,使用MS SQL Server 2017,我有两个表: 贷款:列包括贷款、组织ID 组织:列包括组织ID 我的目标是生成JSON,其中包含一个包含组织贷款编号的字符串数组 我使用SQL的思路如下: 选择 组织ID, 选择“[”+STRING_AGG+Loan+,”,“+”] 贷款 其中Loan.OrganizationID=Organization.OrganizationID 作为[贷款] 来自组织 其中OrganizationID=1 对于JSON路径,不带数组包装器; 我想得到这个: 然而

使用MS SQL Server 2017,我有两个表:

贷款:列包括贷款、组织ID 组织:列包括组织ID 我的目标是生成JSON,其中包含一个包含组织贷款编号的字符串数组

我使用SQL的思路如下:

选择 组织ID, 选择“[”+STRING_AGG+Loan+,”,“+”] 贷款 其中Loan.OrganizationID=Organization.OrganizationID 作为[贷款] 来自组织 其中OrganizationID=1 对于JSON路径,不带数组包装器; 我想得到这个:

然而,我实际得到的是用引号括起来的贷款价值:

{
    "OrganizationID": 1,
    "Loans": "['Test 001','Test Loan 123','Test Loan 234']"
}
我意识到我可以做到这一点:

选择 组织ID, 选择贷款 贷款 其中Loan.OrganizationID=Organization.OrganizationID 对于JSON路径 作为[贷款] 来自组织 其中OrganizationID=1 对于JSON路径,不带数组包装器; 要制作此文件:

{
    "OrganizationID": 1,
    "Loans": [{
        "Loan": "Test 001"
    }, {
        "Loan": "Test Loan 123"
    }, {
        "Loan": "Test Loan 234"
    }]
}
但是,我的要求是生成一个简单的字符串数组,而不是贷款对象数组

关于如何塑造JSON的建议将不胜感激

JSON字符串用作分隔符,而不是'。此外,我们应该注意逃跑,以防万一。考虑到这些,JSON_查询将帮助我们:

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;
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;