在MS SQL Server中正确的JSON格式

Sup*_*man 0 sql sql-server json sql-server-2016

我有以下SQL表

user_id  product_1  product_2  product_3
123      Scissors   Stone      Paper
Run Code Online (Sandbox Code Playgroud)

我编写了此代码以将结果格式化为JSON,但无法以所需的格式获取它。如果我将所有产品列都命名为namesql则返回错误 Use different names and aliases for each column in SELECT list.

SQL代码:

select 
    product1 as 'Product1', 
    product2 as 'Product2', 
    product3 as 'Product3'
from Recommendations
where user_id = '123'
FOR JSON PATH, ROOT('Offers')
Run Code Online (Sandbox Code Playgroud)

电流输出:

{"offers":[
   {"Product1": "Scissors", "Product2": "Stone", "Product3": "Paper"}
  ]
}
Run Code Online (Sandbox Code Playgroud)

所需的输出:

{"offers":[
   {"name": "Scissors"}, 
   {"name": "Stone"}, 
   {"name": "Paper"}
  ]
} 
Run Code Online (Sandbox Code Playgroud)

Zho*_*rov 5

您可以尝试以下方法:

表:

CREATE TABLE Recommendations (
   user_id int,  
   product1 varchar(100),  
   product2 varchar(100),    
   product3 varchar(100)
)   
INSERT INTO Recommendations
   (user_id, product1, product2, product3)
VALUES   
   (123, 'Scissors', 'Stone', 'Paper')
Run Code Online (Sandbox Code Playgroud)

声明:

SELECT v.Name
FROM Recommendations r
CROSS APPLY (VALUES (r.product1), (r.product2), (r.product3)) v(Name)
WHERE user_id = '123'
FOR JSON PATH, ROOT('Offers')
Run Code Online (Sandbox Code Playgroud)

结果:

{"Offers":[{"Name":"Scissors"},{"Name":"Stone"},{"Name":"Paper"}]}
Run Code Online (Sandbox Code Playgroud)