SQL - 生成没有列名的 JSON 数组
SQL - generate JSON array without column names
假设我们有这些数据
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" ]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
}
]
}
我该怎么做?
一种可能的解决方案是使用 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"
]
}
]
}
假设我们有这些数据
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" ]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
}
]
}
我该怎么做?
一种可能的解决方案是使用 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"
]
}
]
}