Sql 使用列名和值作为键值对创建JSON
我们必须将数据导出格式化为具有特定格式的JSON。这里是一个测试用例:Sql 使用列名和值作为键值对创建JSON,sql,json,sql-server,tsql,Sql,Json,Sql Server,Tsql,我们必须将数据导出格式化为具有特定格式的JSON。这里是一个测试用例: DECLARE @tmp TABLE (ID INT, value1 VARCHAR(30), value2 VARCHAR(30)) INSERT @tmp VALUES (1,'test1','test2') 输出应为: { “ID”:1, “自定义_属性”:[ { “属性代码”:“值1”, “值”:“test1” }, { “属性代码”:“值2”, “值”:“test2” } ] } 我们必须为某些列创建两个键值对
DECLARE @tmp TABLE (ID INT, value1 VARCHAR(30), value2 VARCHAR(30))
INSERT @tmp VALUES (1,'test1','test2')
输出应为:
{
“ID”:1,
“自定义_属性”:[
{
“属性代码”:“值1”,
“值”:“test1”
},
{
“属性代码”:“值2”,
“值”:“test2”
}
]
}
我们必须为某些列创建两个键值对。第一个描述列名,第二个描述值。并在顶部将其打包成一个阵列
我想知道这是否适用于本机t-sql JSON函数,因为我需要一个适当的JSON作为输出(而不是字符串)。您需要对JSON使用嵌套的
:
DECLARE @tmp TABLE(ID INT, value1 VARCHAR(30), value2 VARCHAR(30));
INSERT @tmp VALUES (1, 'test1', 'test2');
SELECT ID, custom_attributes = (
SELECT attribute_code, value
FROM @tmp AS x
-- column to rows
CROSS APPLY (VALUES
('value1', value1),
('value2', value2)
) AS a(attribute_code, value)
WHERE x.ID = t.ID
FOR JSON PATH
)
FROM @tmp AS t
FOR JSON AUTO
您需要对JSON使用嵌套的:
DECLARE @tmp TABLE(ID INT, value1 VARCHAR(30), value2 VARCHAR(30));
INSERT @tmp VALUES (1, 'test1', 'test2');
SELECT ID, custom_attributes = (
SELECT attribute_code, value
FROM @tmp AS x
-- column to rows
CROSS APPLY (VALUES
('value1', value1),
('value2', value2)
) AS a(attribute_code, value)
WHERE x.ID = t.ID
FOR JSON PATH
)
FROM @tmp AS t
FOR JSON AUTO
我找到了一个可能的答案,这是可行的,但似乎有点复杂
SELECT tmp.ID
, (
SELECT ca.attribute_code
, ca.[value]
FROM @tmp tmp2
CROSS APPLY (
VALUES
('value1',value1),
('value2',value2)
) ca (attribute_code, [value])
WHERE tmp2.ID = tmp.ID
FOR JSON PATH
) [custom_attributes]
FROM @tmp tmp
FOR JSON PATH
我找到了一个可能的答案,这是可行的,但似乎有点复杂
SELECT tmp.ID
, (
SELECT ca.attribute_code
, ca.[value]
FROM @tmp tmp2
CROSS APPLY (
VALUES
('value1',value1),
('value2',value2)
) ca (attribute_code, [value])
WHERE tmp2.ID = tmp.ID
FOR JSON PATH
) [custom_attributes]
FROM @tmp tmp
FOR JSON PATH
到目前为止你试过什么?你看过JSON的了吗?如果没有,我建议你这样做,如果你失败了,展示你的尝试。(注意:FOR JSON
是在SQL Server 2016中添加的。如果您使用的是较旧版本的SQL Server,则可能需要使用其他工具从数据生成JSON(因为仅在T-SQL中生成JSON并不是一项简单的任务),或者创建CLR函数。我假设您使用的是2016+而没有版本标记。)到目前为止你试过什么?你看过JSON的了吗?如果没有,我建议你这样做,如果你失败了,展示你的尝试。(注意:FOR JSON
是在SQL Server 2016中添加的。如果您使用的是较旧版本的SQL Server,则可能需要使用其他工具从数据生成JSON(因为仅在T-SQL中生成JSON并不是一项简单的任务),或者创建CLR函数。我假设您使用的是2016+而没有版本标记。)