SQL 服务器 table 数据到 JSON 路径结果

SQL Server table data to JSON Path result

我正在寻找将 table 结果转换为 JSON 路径的解决方案。

我有一个包含两列的 table,如下所示。第 1 列将始终具有正常值,但第 2 列将具有最多 15 个由“;”分隔的值(分号)。

ID   Column1               Column2
--------------------------------------
 1      T1               Re;BoRe;Va

我想将上面的列数据转换成下面的JSON格式

{
    "services": 
    [
        { "service": "T1"}
    ], 
    "additional_services": 
    [
        { "service": "Re" }, 
        { "service": "BoRe" }, 
        { "service": "Va" }
    ]
}

我试过创建类似下面的内容,但无法获得我正在寻找的确切格式

SELECT 
    REPLACE((SELECT d.Column1 AS services, d.column2 AS additional_services
             FROM Table1 w (nolock)
             INNER JOIN Table2 d (nolock) ON w.Id = d.Id
             WHERE ID = 1
             FOR JSON PATH), '\/', '/')

请告诉我这是否是我们可以使用 T-SQL

实现的

正如我在评论中提到的,我强烈建议您修复设计并规范化设计。不要在数据库中存储分隔数据; Re;BoRe;Va 应该是 3 行,而不是 1 个分隔行。这并不意味着你不能用你的非规范化数据实现你想要的,只是你的设计有缺陷,因此需要提出来。

实现您所追求的目标的一种方法是使用一些嵌套的 FOR JSON 调用:

SELECT (SELECT V.Column1 AS service
        FOR JSON PATH) AS services,
        (SELECT SS.[value] AS service 
         FROM STRING_SPLIT(V.Column2,';') SS
         FOR JSON PATH) AS additional_services
FROM (VALUES(1,'T1','Re;BoRe;Va'))V(ID,Column1,Column2)
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER;

结果如下 JSON:

{
    "services": [
        {
            "service": "T1"
        }
    ],
    "additional_services": [
        {
            "service": "Re"
        },
        {
            "service": "BoRe"
        },
        {
            "service": "Va"
        }
    ]
}