首页 > 解决方案 > 将 XML 属性转换为 json

问题描述

作为一个简化的示例,请考虑这个包含两个字段的表。一个是字符串,另一个是 XML。

SELECT TOP (1) [Source]
      , OrderParameter
  FROM [Rops].[dbo].[PreOrder]

现在我想查询表并将结果作为 json,但也将 XML 一次性转换为 json。

SELECT TOP (1) [Source]
      , OrderParameter
  FROM [Rops].[dbo].[PreOrder]
for json path;

结果是

[{"Source":"MediaConversions","OrderParameter":"<ParameterList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3 .org/2001/XMLSchema" />"}]

但我希望将其转换为:

[{"Source":"MediaConversions","OrderParameter":{ "ParameterList": ["x": 1, "y": 10] } ]

如何添加“for json”以转换 xml?

SELECT TOP (1) [Source]
      , select OrderParameter for json path????
  FROM [Rops].[dbo].[PreOrder]
for json path;

标签: jsonsql-serverxml

解决方案


看起来您想要提取ParameterListXML 中节点的内部文本。您可以.value为此使用 XQuery:

SELECT TOP (1) [Source]
      , OrderParameter = (
           SELECT
              x = x.PL.value('(x/text())[1]','int'),
              y = x.PL.value('(y/text())[1]','int')
           FROM (VALUES( CAST(OrderParameter AS xml) )) v(OrderParameter)
           CROSS APPLY v.OrderParameter.nodes('ParameterList') x(PL)
           FOR JSON PATH, ROOT('ParameterList')
        )
  FROM [Rops].[dbo].[PreOrder]
FOR JSON PATH;

推荐阅读