【问题标题】:SQL - generate JSON array without column namesSQL - 生成没有列名的 JSON 数组
【发布时间】:2019-10-31 21:17:04
【问题描述】:

假设我们有这些数据

CREATE TABLE [dbo].[tValues]
(
    [cValue] [VARCHAR](50) NULL
) ON [PRIMARY]

INSERT INTO [dbo].[tValues] ([cValue]) 
VALUES ('red'), ('green'), ('blue'), ('brown')

从这个查询:

SELECT 
    (JSON_QUERY((SELECT 
                     'Ball' AS title, 
                     '20cm' AS size,
                     (SELECT cValue FROM tValues FOR JSON PATH) AS [colors]
                 FOR JSON PATH))) AS product
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER

我得到了这个 JSON 结果:

{
    "product": [
                 { "title":"Ball", 
                   "size":"20cm", 
                   "colors": [
                                { "cValue": "red" },
                                { "cValue": "green" },
                                { "cValue": "blue" },
                                { "cValue": "brown" }
                             ]
                 }
               ]
}

但我需要在colors 标签中没有列名和大括号,如下所示:

{
    "product": [
                  {
                      "title": "Ball",
                      "size": "20cm",
                      "colors": [ "red", "green", "blue", "brown" ]
                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                  }
               ]
}

我该怎么做?

【问题讨论】:

  • 从 SQL-Server 2017 开始有 STRING_AGG(),但实际上,这应该包含在 FOR JSON 语法中......

标签: sql json tsql sql-server-2016


【解决方案1】:

一种可能的解决方案是使用for xml path 和stuff 来构建您的阵列:

SELECT 
    (JSON_QUERY((SELECT 
                     'Ball' AS title, 
                     '20cm' AS size,
                      JSON_QUERY(
                    '[' + STUFF(( SELECT ',' + '"' + cValue + '"' 
                    FROM tValues 
                    FOR XML PATH('')),1,1,'') + ']' ) AS [colors]
                 FOR JSON PATH)

                 )) AS product
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER

结果:

{
   "product":[
      {
         "title":"Ball",
         "size":"20cm",
         "colors":[
            "red",
            "green",
            "blue",
            "brown"
         ]
      }
   ]
}

【讨论】:

    猜你喜欢
    • 2023-04-04
    • 2022-01-22
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-07
    相关资源
    最近更新 更多