sql-server 使用json元素解析XML

jvlzgdj9  于 2022-10-31  发布在  其他
关注(0)|答案(1)|浏览(283)

下面列出了一些示例xml,我正在尝试从SQL解析此数据。无论我如何尝试使用下面列出的三种方法提取数据,我总是得到空记录。我希望将每个值元素的描述放入一列。
第一个

ogsagwnx

ogsagwnx1#

请尝试以下解决方案。
由于未提供#3,您可能需要调整输出。

查询语句

DECLARE @XMLData XML =
N'<ArrayOfKeyValueOfstringstring xmlns:i="https://protect-us.mimecast.com/s/9cb7CpYVxNhnZ2PEHP-RJz?domain=w3.org" xmlns="https://protect-us.mimecast.com/s/jkqRCqx8yOt8vQG6hXaX0z?domain=schemas.microsoft.com">
    <KeyValueOfstringstring>
        <Key>dateCleared</Key>
        <Value>null</Value>
    </KeyValueOfstringstring>
    <KeyValueOfstringstring>
        <Key>juvenile</Key>
        <Value>{"code":"N","description":"No"}</Value>
    </KeyValueOfstringstring>
    <KeyValueOfstringstring>
        <Key>uOF</Key>
        <Value>{"code":"N","description":"No"}</Value>
    </KeyValueOfstringstring>
    <KeyValueOfstringstring>
        <Key>disposition</Key>
        <Value>{"code":"0","description":"0 NOT CLEARED"}</Value>
    </KeyValueOfstringstring>
    <KeyValueOfstringstring>
        <Key>domViol</Key>
        <Value>{"code":"N","description":"No"}</Value>
    </KeyValueOfstringstring>
</ArrayOfKeyValueOfstringstring>';

;WITH XMLNAMESPACES(DEFAULT 'https://protect-us.mimecast.com/s/jkqRCqx8yOt8vQG6hXaX0z?domain=schemas.microsoft.com')
    , rs AS
(
    SELECT c.value('(Key/text())[1]', 'VARCHAR(30)') AS [key]
        , c.value('(Value/text())[1]', 'NVARCHAR(MAX)') AS [json]
    FROM @XMLData.nodes('/ArrayOfKeyValueOfstringstring/KeyValueOfstringstring') AS t(c)
)
SELECT *
    , JSON_VALUE([json], '$.code') AS code
    , JSON_VALUE([json], '$.description') AS [description]
FROM rs
WHERE ISJSON([json]) = 1;

输出

| 钥匙|詹森|代码|说明书|
| - -|- -|- -|- -|
| 幼年的|{【编码】:“否”,【描述】:“否”}|不|没有|
| 无故障|{【编码】:“否”,【描述】:“否”}|不|没有|
| 处置|{“代码”:“0”,“说明”:“0未清除”}|第0页|0未清除|
| 多姆维奥尔|{【编码】:“否”,【描述】:“否”}|不|没有|

相关问题