Azure 逻辑应用程序:检查 属性 是否存在于 json 对象中

Azure Logic App: Checking whether property exists in a json object

我有一个 JSON 来自如下所示的 'SQLServer GetRecords (V2)' 操作。不幸的是,响应将不包含具有空值的字段。在我的示例中,某些项目的 'Name' 字段为空。

[
  {
    "@odata.etag": "",
    "ItemInternalId": "378fd3bc-0cd4-4171-8e7d-462461086580",
    "RowID": 1,
    "Name": "1234"
  },
  {
    "@odata.etag": "",
    "ItemInternalId": "378fd3bc-0cd4-4171-8e7d-462461086580",
    "RowID": 1
  }, ...
}

我想迭代这些项目并将每个项目传递到另一个 HTTP 端点。

当我使用 item()['Name']item()?['Name']要访问名称字段,第二项 saying

将失败

无法计算模板语言表达式,因为 属性 'Name' 不存在,可用的属性是 ...

我看到很多人结合使用 xpath 函数和 xml 函数来检索值。

https://docs.microsoft.com/en-us/azure/logic-apps/workflow-definition-language-functions-reference

但是当我使用像 xpath(xml(item()), '/Name') 这样的想法时,它会抛出一个错误说

模板语言函数'xml'参数无效。提供的值无法转换为 XML:'JSON root object has property '@odata.etag' 将转换为属性。根对象不能有任何属性特性。考虑指定 DeserializeRootElementName。路径'['@odata.etag']'。'。请参阅 https://aka.ms/logicexpressions#xml 了解使用详情。

更新 1

我用下面的表达式得到了这个,我真的不喜欢这个

first(xpath(xml(addProperty(json('{}'), 'obj', item())), '//obj/Name[1]/text()'))

有没有其他简单的方法可以解决我的问题。提前致谢

如果您正在使用 JSON:

item()?['Name']

对于这个问题,您似乎从“SQLServer GetRecords (V2)”直接。我们可以只用一个“Parse JSON”动作来轻松解决这个问题。请参考下面我的逻辑应用程序:

1. 我初始化一个变量存储与你相同的 json 数据来模拟来自“SQLServer GetRecords (V2)".

2. 然后添加“Parse JSON”动作来解析json数据。我们可以点击“Use sample payload to generate schema”按钮并将json数据复制到其中。它将自动生成架构。架构如下所示(请注意架构指定这些字段在 required 属性).

{
    "items": {
        "properties": {
            "@@odata.etag": {
                "type": "string"
            },
            "ItemInternalId": {
                "type": "string"
            },
            "Name": {
                "type": "string"
            },
            "RowID": {
                "type": "integer"
            }
        },
        "required": [
            "@@odata.etag",
            "ItemInternalId",
            "RowID"
        ],
        "type": "object"
    },
    "type": "array"
}

3. 现在使用“For each”从“Parse body循环JSON" 并使用 Name 属性 从 "Parse JSON 设置 "Value" 框]".

4. 运行逻辑应用程序,它工作正常,没有任何错误消息。

如果有人想检查 JSON 属性 是否存在,您可以使用带有 not & empty 表达式的条件,例如 -

  "expression": {
    "not": [
      {
        "empty": [
          "@JSONobject()?['keyName']"
        ]
      }
    ]
  },
...
..
.

...这似乎是一个古老但仍然有效的问题。

你可以做的实际上是使用“configure 运行 after”。初始化变量类型布尔值,然后在下一个框中尝试将变量设置为表达式“not(empty(

很简单。您可以只使用逻辑应用程序中的 Null 函数: