SQL to JSON - SQL 2016 中的对象数组到值数组

新手上路,请多包涵

SQL 2016 有一项新功能,可将 SQL 服务器上的数据转换为 JSON。我很难将对象数组组合成值数组,即

例子 -

 CREATE TABLE #temp (item_id VARCHAR(256))

INSERT INTO #temp VALUES ('1234'),('5678'),('7890')

SELECT * FROM #temp

--convert to JSON

SELECT (SELECT item_id
FROM #temp
FOR JSON PATH,root('ids'))

结果 -

 {
    "ids": [{
        "item_id": "1234"
    },
    {
        "item_id": "5678"
    },
    {
        "item_id": "7890"
    }]
}

但我希望结果为 -

 "ids": [
        "1234",
        "5678",
        "7890"
    ]

有人可以帮我吗?

原文由 Meghana Raj Jayanarasimha 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 519
2 个回答

谢谢!我们发现的灵魂首先转换为 XML -

 SELECT
JSON_QUERY('[' + STUFF(( SELECT ',' + '"' + item_id + '"'
FROM #temp FOR XML PATH('')),1,1,'') + ']' ) ids
FOR JSON PATH , WITHOUT_ARRAY_WRAPPER

原文由 Meghana Raj Jayanarasimha 发布,翻译遵循 CC BY-SA 3.0 许可协议

这是一个可能实用也可能不实用的疯狂想法。使用 JSON_MODIFY 递归您的数据集并将内容附加到您的 JSON 数组中:

 with
  d (d) as (select * from (values (1),(2),(3),(4)) t (d)),
  j (d, j) as (
    -- Adapt the recursion to make it dynamic
    select 1, json_modify('[]', 'append $', d)
    from d
    where d = 1
    union all
    select d.d, json_modify(j, 'append $', d.d)
    from d join j on d.d = j.d + 1
  )
select *
from j;

出于说明目的,我保持简单。当然,您将对其进行调整以使其具有动态性。这会产生:

 |d  |j        |
|---|---------|
|1  |[1]      |
|2  |[1,2]    |
|3  |[1,2,3]  |
|4  |[1,2,3,4]|

甚至可以用来模拟标准 SQL JSON_ARRAYAGG

原文由 Lukas Eder 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进