Azure 逻辑应用程序 - 使用动态 key/name 解析 JSON

Azure Logic App - Parse JSON with dynamic key/name

只是想知道我是否以及如何在 JSON 中解析具有动态名称的 HTTP 响应? 我使用 Azure Management API to receive the managed identities (system- and user assigned managed identities) 接收所有托管身份。 我用 foreach 迭代结果。

如果资源有 system assigned managed identityuser assigned managed identity,响应如下所示:

{
  "principalId": "<principalId1>",
  "tenantId": "<tenantId>",
  "type": "SystemAssigned, UserAssigned",
  "userAssignedIdentities": {
    "/subscriptions/<subscriptionId>/resourcegroups/<resourceGroupName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<userAssignedIdentitiesName>": {
      "principalId": "<principalId2>",
      "clientId": "<clientId>"
    }
  }
}

现在,我想得到<principalId2>。 不幸的是,对象的 Name 与资源范围 /subscriptions/<subscriptionId>/resourcegroups/<resourceGroupName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<userAssignedIdentitiesName>.

是动态相关的

如何解析 JSON 以接收所需的 <principalId2>? 对于所有其他响应,我可以轻松地将 Data operations Parse JSON 与我从 HTTP 响应中插入的有效负载一起使用。 有没有办法使用通配符?否则,我能否以某种方式 select userAssignedIdentities 的第一个对象接收所需的值?

好的,这应该适合你。这是我用 ...

测试的流程

初始化JSON

您的 JSON 作为 字符串,您在解决方案中的处理方式可能略有不同。

初始化 XPath 结果

定义为数组,表达式为...

xpath(xml(json(concat('{ root: ', replace(variables('JSON'), 'PrincipalId', 'principalId'), '}'))), '(//principalId)[2]')

初始化结果

又做了一些工作,但定义为 String,表达式为 ...

array(xpath(xml(base64ToString(variables('XPath Result')[0]?['$content'])), '//text()'))[0]

最终结果应该是你的价值...