提问人:SteveG 提问时间:11/16/2023 最后编辑:SteveG 更新时间:11/18/2023 访问量:51
从具有多条记录的 SQL 表创建 JSON 数组
Create JSON Array from SQL table with multiple records
问:
我有一个名为Accts的SQL表,其数据显示如图所示。我想创建一个 JSON 文件,其中包含客户编号数组。
使用下面的代码,我能够以正确的格式获取它。如何让 Customers 数组中的每个客户都被 Quotes 包围?
select a.[Name], a.[Identifier], JSON_ARRAY("Customer")as Customers
from
(
select ltrim(rtrim([Name])) as [Name],ltrim(rtrim([Identifier])) as Identifier,
string_agg(cast(ltrim(rtrim(custnmbr)) as varchar(max)), ', ') as Customer
from [dbo].[AcctReps]
Group by [Identifier], [Name]
)a
FOR json AUTO, Root('代表')
答:
0赞
Adrian Maxwell
11/16/2023
#1
请注意,以下假设查询是用 T-SQL 编写的。(理想情况下,应选择标识 dbms 的标记。
FORMATMESSAGE('"%s"', custnmbr)
将在每个 custnmbr 周围添加双引号。请参阅 FORMATMESSAGE
CREATE TABLE [dbo].[AcctReps]
(
[Name] NVARCHAR(50),
[Identifier] NVARCHAR(50),
[custnmbr] NVARCHAR(50)
)
INSERT INTO [dbo].[AcctReps] ([Name], [Identifier], [custnmbr])
VALUES
('John Doe', 'JD1', 'CUST001'),
('John Doe', 'JD1', 'CUST002'),
('Jane Smith', 'JS1', 'CUST003'),
('Jane Smith', 'JS1', 'CUST004'),
('Jane Smith', 'JS1', 'CUST005'),
('Bob Johnson', 'BJ1', 'CUST006')
6 rows affected
select a.[Name], a.[Identifier], JSON_QUERY('[' + a.Customer + ']') as Customers
from
(
select ltrim(rtrim([Name])) as [Name], ltrim(rtrim([Identifier])) as Identifier,
string_agg(FORMATMESSAGE('"%s"', cast(ltrim(rtrim(custnmbr)) as varchar(max))), ', ') as Customer
from [dbo].[AcctReps]
Group by [Identifier], [Name]
) a
FOR JSON PATH, ROOT('Reps')
JSON_F52E2B61-18A1-11D1-B105-00805F49916B |
---|
{“Reps”:[{“Name”:“Bob Johnson”,“Identifier”:“BJ1”,“Customers”:[“CUST006”]},{“Name”:“Jane Smith”,“Identifier”:“JS1”,“Customers”:[“CUST003”, “CUST004”, “CUST005”]},{“Name”:“John Doe”,“Identifier”:“JD1”,“Customers”:[“CUST001”, “CUST002”]}]} |
请注意,最好以可重用的格式(非图像)提供您自己的示例数据。
{
"Reps": [
{
"Name": "Bob Johnson",
"Identifier": "BJ1",
"Customers": [
"CUST006"
]
},
{
"Name": "Jane Smith",
"Identifier": "JS1",
"Customers": [
"CUST003",
"CUST004",
"CUST005"
]
},
{
"Name": "John Doe",
"Identifier": "JD1",
"Customers": [
"CUST001",
"CUST002"
]
}
]
}
评论
0赞
SteveG
11/16/2023
非常感谢您的帮助。代码有效,输出正是我想要的。很抱歉没有添加实际数据。我试过了,但格式不正确,所以我改用粘贴图像。再次感谢。
0赞
Adrian Maxwell
11/17/2023
要使文本以固定宽度的字体显示,只需缩进 4 个空格即可。工具栏中也有一个图标。搜索网站帮助以获取有关格式的更多信息。还有一些免费网站可以将文本转换为固定宽度的表格。避免图像的方法有很多。请不要将它们用于数据。
0赞
Adrian Maxwell
11/17/2023
将来,请使用数据库类型标记您的问题(我仍然可以假设是 sql server)。
评论