0

我想从 API 获取 xml 文件(我无法从这个 API 获取 Json 格式)。此后,我想将它们转换为 JSON,然后使用逻辑应用程序保存到 oneDrive。(我打算从 Azure SQL 服务器中的这些 json 文件创建表)

  1. 到目前为止,我的方法是使用 HTTP GET 响应触发逻辑应用程序。

  2. 使用 json(xml(triggerBody())) 将上述步骤 1 中收到的 xml 文件转换为 json 并将其保存到 oneDrive。

应用程序的逻辑步骤是: 1) 从 API 获取 HTTP 响应 2) 使用函数 json(xml(triggerBody())) 将响应保存为 oneDrive 上的 json

逻辑应用步骤

这是来自 API 的 xml 文件的副本:

<?xml version="1.0" encoding="ISO-8859-1"?>
-<n1:VareResult xmlns:n1="http://ABCC.Schemas.Vare/8.0" xmlns:n7="http://ABCC.Schemas.Common/8.0">
-<n1:Header>
-<n1:EksportType>
 <n7:EksportId>0</n7:EksportId>
 <n7:Eksportmetode/>
 <n7:StartIndex>0</n7:StartIndex>
 <n7:BatchSize>2000</n7:BatchSize>
 <n7:TotalCount>1</n7:TotalCount>
 <n7:VersionNr/>
</n1:EksportType>
-<n1:Result> <n7:ResultValue>Success</n7:ResultValue> </n1:Result>
</n1:Header>
-<n1:VareListe>
-<n1:Vare>
 -<n1:Status>
   <n7:Created>2004-06-27T15:30:57.549</n7:Created>
   <n7:Updated>2019-11-20T09:34:03.008</n7:Updated>
 </n1:Status>
<n1:ABCCNr>10203</n1:ABCCNr>
........
........

这是它对应的json文件:

{"?xml":{"@version":"1.0","@encoding":"iso-8859-1"},"n1:VareResult":
{"@xmlns:n7":"http://ABCC.Schemas.Common/8.0","@xmlns:n1":"http://ABCC.Schemas.Vare/8.0","n1:Header":
{"n1:EksportType":
{"n7:EksportId":"0","n7:Eksportmetode":null,"n7:StartIndex":"0","n7:BatchSize":"2000","n7:TotalCount":
"1","n7:VersionNr":null},"n1:Result":{"n7:ResultValue":"Success"}},"n1:VareListe":{"n1:Vare":
{"n1:Status":{"n7:Created":"2004-06-27T15:30:57.549","n7:Updated":"2019-11-20T09:34:03.008"},
"n1:ABCCNr":"10203",
........
.......

如您所见,json 文件也具有命名空间前缀。我正在尝试在 sql server 中导航路径。这是示例:下图显示了命令的结果:select * FROM OPENJSON(@jsonObject)

我想访问键 n1:VareResult 的值。

SQL 服务器中的 JSON 对象

我试图像这样导航路径:select * FROM OPENJSON (@jsonObject,'$.n1:VareResult' ) 但我收到错误消息:“JSON 路径格式不正确。在位置 4 找到了意外字符 ':'。”

是否有一个转义序列可以让我在路径中导航,即使它有这些“禁止字符”?如果没有,我是否可以在上面的步骤 2 中控制从 xml 到 json 的转换,以便为每个元素省略命名空间前缀?

4

2 回答 2

0

使用来自:https ://stackoverflow.com/a/45873164/10404094 的提示,我在 sql server 中的字段名称周围添加了双引号,它起作用了。像这样:

select * FROM OPENJSON (@jsonObject, '$."n1:VareResult"."n1:VareListe"."n1:Vare" ') 

这解决了我的问题!感谢堆栈溢出!

于 2019-12-18T08:01:09.733 回答
0

让我给你一个例子,然后你可以尝试这样的事情:

DECLARE @json NVARCHAR(4000) = N'{  
      "path": {  
            "to":{  
                 "sub-object":["en-GB", "en-UK","de-AT","es-AR","sr-Cyrl"]  
                 }  
              }  
 }';

SELECT [key], value
FROM OPENJSON(@json,'$.path.to."sub-object"')

附加参考:

https://docs.microsoft.com/en-us/sql/t-sql/functions/openjson-transact-sql?view=sql-server-ver15

希望能帮助到你。

于 2019-12-18T13:22:10.220 回答