简体   繁体   English

在SQL Server中连接嵌套的JSON

[英]Concatenate nested JSON in SQL Server

I am trying to concatenate nested JSON in SQL, how to do that. 我试图在SQL中连接嵌套的JSON,如何做到这一点。

Please help me out with this. 这个你能帮我吗。

Example: I have JSON Like below . 示例: 我有JSON,如下所示

    [
  {
    "Name": "Cards",
    "Value": [
      "Pack of 24 Dare Cards"
    ],
    "SourceSpecified": false,
    "Any": []
  },
  {
    "Name": "Boppers and Shot Glasses",
    "Value": [
      "12 Willy Shot Glass and 12 Hen Boppers"
    ],
    "SourceSpecified": false,
    "Any": []
  }
]

I want Out Put: 我想要外出:

Pack of 24 Dare Cards-12 Willy Shot Glass and 12 Hen Boppers

If Value always contains one element 如果Value始终包含一个元素

DECLARE @JSON NVARCHAR(MAX) = '    [
  {
    "Name": "Cards",
    "Value": [
      "Pack of 24 Dare Cards"
    ],
    "SourceSpecified": false,
    "Any": []
  },
  {
    "Name": "Boppers and Shot Glasses",
    "Value": [
      "12 Willy Shot Glass and 12 Hen Boppers"
    ],
    "SourceSpecified": false,
    "Any": []
  }
]'

SELECT STRING_AGG(Val, '-')
FROM OPENJSON(@JSON)
WITH (Val NVARCHAR(MAX) '$.Value[0]')

Support of multiple value s is also easy. 支持多个也很容易。

SELECT STRING_AGG(Val, '-')
FROM OPENJSON(@JSON)
WITH (VALUE NVARCHAR(MAX) '$.Value' AS JSON)
OUTER APPLY OPENJSON(VALUE) WITH (Val NVARCHAR(MAX) '$')

This one I achieved with creating a scalar-valued function to populate concatenated value. 我通过创建一个标量值函数来填充连接值。

Create FUNCTION  [dbo].[test] 
(
    @VariationData nvarchar(max)
)
RETURNS nvarchar(max)
AS
BEGIN
                          Declare @val nvarchar(max)
                          select @val = COALESCE(@val+', ','')+ Value from  OPENJSON(@VariationData)
                          With ([Value] NVARCHAR(MAX) N'$.Value[0]') 
                          return @val

END

Call function with nested JSON value ie 使用嵌套的JSON值调用函数,即

Select  [dbo].[test] (@JSON);

This worked for me. 这对我有用。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM