【问题标题】:Nest Json Array mergeNest Json 数组合并
【发布时间】:2018-05-21 02:06:31
【问题描述】:

我的表中有一列保存了 json 数据:

declare @json nvarchar(max)
set @json = N'
{
    "Companies": [
        {
            "CompanyId": "A",
            "Employee": null
        },
        {
            "CompanyId": "B",
            "Employee": [
                {
                    "EmployeePictureId": null,
                    "Name": "Employee1"
                },
                {
                    "EmployeePictureId": "PictureId2",
                    "Name": "Employee2"
                }
            ]
        },
        {
            "CompanyId": "C",
            "Employee": [
                {
                    "EmployeePictureId": null,
                    "Name": "Employee3"
                },
                {
                    "EmployeePictureId": null,
                    "Name": "Employee4"
                }
            ]
        }
    ]
}
'

是否有可能得到如下结果:

{
   "EmployeePictureIds": ["PictureId2"]
}

使用Json_QueryJson_ValueOPENJSON...

仅获取EmployeePictureId 并跳过空(null)数据

顺便说一下,数组中元素的数量是不确定的。

【问题讨论】:

    标签: sql-server tsql sql-server-2016 json-query


    【解决方案1】:

    在 SQL Server 2017 中,您可以使用以下查询:

    select json_query(QUOTENAME(STRING_AGG('"' + STRING_ESCAPE( A.EmployeePictureId , 'json') 
                      + '"', char(44)))) as [EmployeePictureIds]
    FROM OPENJSON(@json, '$.Companies')
    WITH 
    ( 
      CompanyId  NVARCHAR(MAX),
      Employee  NVARCHAR(MAX)  as json  
    ) as B
    cross apply openjson (B.Employee)  
    with  
    (  
        EmployeePictureId VARCHAR(50),  
        [Name] VARCHAR(50)
    ) as A     
    where A.EmployeePictureId is not null
    for json path , WITHOUT_ARRAY_WRAPPER
    

    您提供的 JSON 的结果:

    结果添加另一个非空EmployeePictureId

    【讨论】:

      猜你喜欢
      • 2023-03-16
      • 2017-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-05
      • 2019-08-30
      • 1970-01-01
      相关资源
      最近更新 更多