首页 > 解决方案 > 如何将一列中的 3 列和 10 行合并为 json 数据

问题描述

我有 10 行和 3 列,

在 3 列中,2 列的数据JSON格式为

我正在尝试将所有行的数据合并到一个具有 json 数据并且有效的列中,

就像如果第 1 行有一个json,它应该加入 json 和列名,然后是下一行,依此类推

已经能够这样做了,我的数据像这样重复

[   {
      "role":"poweruser",
      "account":"active",
      "Name" : "Rose"   
   
},
   {
      "role":"Admin",
      "account":"inactive",
      "Name" : "Rose" 
   
}]

我正在尝试的输出是这样的

[{
    "name":"Rose" {
          "role":"poweruser",
          "account":"active"   
          },
          {
          "role":"Admin",
          "account":"inactive"
          }
    }]

我的表结构是这样的

select role,account,(another case statement) as name 
from table1 inner join table2 on table1.id = table2.id 

但我希望 JSON 不应该重复名称,一个名称和另外两个作为嵌套输出字面上不知道我应该做什么,建议

标签: sql-server

解决方案


Microsof SQL Server 对处理 JSON 有一些集成支持,您可以在此处此处查看一些文档。

使用“表结构”查询和您提供的小示例数据,我得到以下信息:

-- create sample data
declare @user table
(
    userid int,
    username nvarchar(20)
);

insert into @user (userid, username) values
(1, 'Rose');


declare @userrole table
(
    userid int,
    rolename nvarchar(20),
    rolestatus nvarchar(20)
);

insert into @userrole (userid, rolename, rolestatus) values
(1, 'poweruser', 'active'),
(1, 'admin', 'inactive');

SQL Server 完成所有工作的一个非常基本的查询:

select  u.username as 'Name',
        roles.rolename as 'Role',
        roles.rolestatus as 'Account'
from @user u
join @userrole Roles
    on Roles.userid = u.userid
for json auto; -- specify that we want JSON output with AUTOmatic structure

这给出了:

[{"Name":"Rose","roles":[{"Role":"poweruser","Account":"active"},{"Role":"admin","Account":"inactive"}]}]

可以格式化为:

[
    {
        "Name":"Rose",
        "Roles":
        [
            {
                "Role":"poweruser",
                "Account":"active"
            },
            {
                "Role":"admin",
                "Account":"inactive"
            }
        ]
    }
]

如果这不是您所追求的,请扩展您的问题(使用更多示例数据)。


推荐阅读