T-SQL JSON 嵌套到数组中的路径

T-SQL JSON path nested into array

我正在思考一些(我认为很愚蠢的)T-SQL 代码段。 使用一些 SQL 数据,我正在创建一个 HTTP 请求正文来执行 API 调用,我知道 T-SQL/SQL 不是执行这些操作的方法。但是我配置的应用程序没有选项。

查询(用“0 = 0”大小写等虚构):

DECLARE @body VARCHAR(MAX)

SET @body = (
        SELECT TOP 1
        CASE WHEN 0 = 0 THEN 'OUTBOUND' ELSE 'INBOUND' END AS direction, 
        CASE WHEN 0 = 0 THEN CAST('true' AS BIT) ELSE CAST('false' AS BIT) END AS isAlone,
        CASE WHEN 0 = 0 THEN 
         'AB123'
        END AS Registration
        FROM table
        FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
        )

SELECT @body

这很好地吐出一个JSON:

{
    "direction": "OUTBOUND",
    "isAlone": true,
    "Registration": "AB123"
}

到目前为止一切顺利。但是我正在与之交谈的 API 需要以下“注册”键:

{
    "direction": "OUTBOUND",
    "isAlone": true,
    "Registration": [
        "AB123"
    ]
}

所以我需要将“Registration”的值包装在一个数组中。

我尝试过:

不知怎么的,我不知道如何才能完成这项工作。你们能把我推向正确的方向吗?

共同感谢!

如果您在没有路径的情况下使用 JSON_QUERY,它会告诉 SQL 将字符串视为 JSON,因此 FOR JSON PATH 不会影响格式。记录了行为 here

使用 JSON_QUERY()

本机创建 JSON 数组列
CREATE TABLE #test (direction Varchar(100),isAlone bit,Registration Varchar(100))
INSERT INTO #test
VALUES ('OUTBOUND',1,'AB123')

DECLARE @body VARCHAR(1000) = (
SELECT direction
    ,isAlone
    ,Registration = JSON_QUERY(CONCAT('["',registration,'"]'))   
FROM #test
FOR JSON PATH,WITHOUT_ARRAY_WRAPPER 
)

SELECT @body