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 函数:
我有一个 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 函数: