如何在SQL Server 2017中将XML转换为JSON?

问题描述 投票:-1回答:1

我想将XML列转换为JSON字符串。

XML:

<Policies>
  <Policy>
    <GroupUserName>testX</GroupUserName>
    <Roles>
      <Role>
        <Name>Browser</Name>
        <Description>May view folders, reports and subscribe to reports.</Description>
      </Role>
      <Role>
        <Name>Content Manager</Name>
        <Description>May manage content in the Report Server.  This includes folders, reports and resources.</Description>
      </Role>
    </Roles>
  </Policy>
  <Policy>
    <GroupUserName>meme</GroupUserName>
    <Roles>
      <Role>
        <Name>Browser</Name>
        <Description>May view folders, reports and subscribe to reports.</Description>
      </Role>
      <Role>
        <Name>My Reports</Name>
        <Description>May publish reports and linked reports; manage folders, reports and resources in a users My Reports folder.</Description>
      </Role>
    </Roles>
  </Policy>
  <Policy>
    <GroupUserName>test980706</GroupUserName>
    <Roles>
      <Role>
        <Name>Browser</Name>
        <Description>May view folders, reports and subscribe to reports.</Description>
      </Role>
    </Roles>
  </Policy>
  <Policy>
    <GroupUserName>Admin</GroupUserName>
    <Roles>
      <Role>
        <Name>Browser</Name>
        <Description>May view folders, reports and subscribe to reports.</Description>
      </Role>
      <Role>
        <Name>Content Manager</Name>
        <Description>May manage content in the Report Server.  This includes folders, reports and resources.</Description>
      </Role>
      <Role>
        <Name>My Reports</Name>
        <Description>May publish reports and linked reports; manage folders, reports and resources in a users My Reports folder.</Description>
      </Role>
      <Role>
        <Name>Publisher</Name>
        <Description>May publish reports and linked reports to the Report Server.</Description>
      </Role>
      <Role>
        <Name>Report Builder</Name>
        <Description>May view report definitions.</Description>
      </Role>
    </Roles>
  </Policy>
</Policies>

JSON:

{
"Id": "00000000-0000-0000-0000-000000000000",
"InheritParentPolicy": false"Policies": [
    {
        "GroupUserName": "testX",
        "Roles": [
            {
                "Name": "Browser",
                "Description": "May view folders, reports and subscribe to reports."
            }
        ]
    },
    {
        "GroupUserName": "Admin",
        "Roles": [
            {
                "Name": "Browser",
                "Description": "May view folders, reports and subscribe to reports."
            },
            {
                "Name": "Content Manager",
                "Description": "May manage content in the Report Server.  This includes folders, reports and resources."
            },
            {
                "Name": "My Reports",
                "Description": "May publish reports and linked reports; manage folders, reports and resources in a users My Reports folder."
            },
            {
                "Name": "Publisher",
                "Description": "May publish reports and linked reports to the Report Server."
            },
            {
                "Name": "Report Builder",
                "Description": "May view report definitions."
            }
        ]
    },
    {
        "GroupUserName": "meme",
        "Roles": [
            {
                "Name": "Browser",
                "Description": "May view folders, reports and subscribe to reports."
            },
            {
                "Name": "My Reports",
                "Description": "May publish reports and linked reports; manage folders, reports and resources in a users My Reports folder."
            }
        ]
    },
    {
        "GroupUserName": "test980706",
        "Roles": [
            {
                "Name": "Browser",
                "Description": "May view folders, reports and subscribe to reports."
            }
        ]
    },
    {
        "GroupUserName": "ETL",
        "Roles": [
            {
                "Name": "Browser",
                "Description": "May view folders, reports and subscribe to reports."
            }
        ]
    },
    {
        "GroupUserName": "Artin",
        "Roles": [
            {
                "Name": "Browser",
                "Description": "May view folders, reports and subscribe to reports."
            }
        ]
    },
    {
        "GroupUserName": "mamad",
        "Roles": [
            {
                "Name": "Browser",
                "Description": "May view folders, reports and subscribe to reports."
            }
        ]
    },
    {
        "GroupUserName": "Salour",
        "Roles": [
            {
                "Name": "Browser",
                "Description": "May view folders, reports and subscribe to reports."
            }
        ]
    },
    {
        "GroupUserName": "Zargar",
        "Roles": [
            {
                "Name": "Browser",
                "Description": "May view folders, reports and subscribe to reports."
            }
        ]
    },
    {
        "GroupUserName": "AUser",
        "Roles": [
            {
                "Name": "Browser",
                "Description": "May view folders, reports and subscribe to reports."
            }
        ]
    },
    {
        "GroupUserName": "TUser",
        "Roles": [
            {
                "Name": "Browser",
                "Description": "May view folders, reports and subscribe to reports."
            }
        ]
    }
]

}

sql-server sql-server-2017
1个回答
0
投票

使用此

SELECT 
    d.value('GroupUserName[1]', 'nvarchar(100)')  AS GroupUserName
    ,(SELECT 
        f.value('Name[1]', 'varchar(50)') AS 'Name'
        ,f.value('Description[1]', 'varchar(50)') AS 'Description'
        FROM c.d.nodes('Roles/Role') AS e(f)            
        FOR JSON PATH) 'Roles'
FROM @xml.nodes('/Policies/Policy') AS c(d)
FOR JSON PATH
© www.soinside.com 2019 - 2024. All rights reserved.