如何使用过滤器数组过滤来自 API 调用的数据?
How to use filter array to filter data from an API call?
试图使逻辑应用程序正常工作,但似乎无法完成最后一步 - 我过去有一个类似的逻辑应用程序可以通过这些步骤工作,但我记不起最后一步了使其正常运行的步骤。
感谢任何人提供的帮助。我在下面包含了一个屏幕截图和一些代码。
Logic app flow Picture
出于显而易见的原因,我已经编辑了一些代码。希望这足以让您大致了解正在发生的事情。
除了过滤器数组错误之外,每个步骤都很好,我尝试了过滤器数组的几种组合,但没有成功。
{
"definition": {
"$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
"actions": {
"Filter_array": {
"inputs": {
"from": "@body('Parse_JSON')?['data']",
"where": "@contains(item(), body('Select'))"
},
"runAfter": {
"Select": [
"Succeeded"
]
},
"type": "Query"
},
"For_each": {
"actions": {
"Send_Data": {
"inputs": {
"body": "@{items('For_each')}",
"headers": {
"Log-Type": "REDACTED"
},
"host": {
"connection": {
"name": "@parameters('$connections')['azureloganalyticsdatacollector']['connectionId']"
}
},
"method": "post",
"path": "/api/logs"
},
"runAfter": {},
"type": "ApiConnection"
}
},
"foreach": "@body('Filter_array')",
"runAfter": {
"Filter_array": [
"Succeeded"
]
},
"type": "Foreach"
},
"HTTP": {
"inputs": {
"headers": {
"Authorization": "API-Token REDACTED"
},
"method": "GET",
"queries": {
"start_date": "@variables('startDate')"
},
"uri": "REDACTED"
},
"runAfter": {
"Initialize_variable": [
"Succeeded"
]
},
"type": "Http"
},
"Initialize_variable": {
"inputs": {
"variables": [
{
"name": "startDate",
"type": "string",
"value": "@{addDays(utcnow(), -5, 'yyyy-MM-dd')}"
}
]
},
"runAfter": {},
"type": "InitializeVariable"
},
"Parse_JSON": {
"inputs": {
"content": "@body('HTTP')",
"schema": {
"properties": {
"body": {
"properties": {
"data": {
REDACTED
}
},
"type": "object"
},
"statusCode": {
"type": "integer"
}
},
"type": "object"
}
},
"runAfter": {
"HTTP": [
"Succeeded"
]
},
"type": "ParseJson"
},
"Run_query_and_list_results": {
"inputs": {
"body": "REDACTED",
"host": {
"connection": {
"name": "@parameters('$connections')['azuremonitorlogs']['connectionId']"
}
},
"method": "post",
"path": "/queryData",
"queries": {
"resourcegroups": “REDACTED”,
"resourcename": "REDACTED",
"resourcetype": "REDACTED",
"subscriptions": "REDACTED",
"timerange": "Last 7 days"
}
},
"runAfter": {
"Parse_JSON": [
"Succeeded"
]
},
"type": "ApiConnection"
},
"Select": {
"inputs": {
"from": "@body('Run_query_and_list_results')?['value']",
"select": "@item()?['checkpoint_s']"
},
"runAfter": {
"Run_query_and_list_results": [
"Succeeded"
]
},
"type": "Select"
}
},
"contentVersion": "1.0.0.0",
"outputs": {},
"parameters": {
"$connections": {
"defaultValue": {},
"type": "Object"
}
},
"triggers": {
"Recurrence": {
"recurrence": {
"frequency": "Hour",
"interval": 1
},
"type": "Recurrence"
}
}
},
"parameters": {
"$connections": {
"value": {
REDACTED
}
}
}
}
}
下面是上述代码在过滤器数组中生成的内容的屏幕截图
Filter Array Error
具体情况:
我做了一个 API 数据调用,我把它通过解析 JSON。 (这部分工作正常 - 除非解析 JSON 定义有问题但我认为没有)
然后我在日志分析中进行查找并使用 select 将其放入列表中(这部分工作正常)
然后我比较这两个数据集,并根据 API 数据中的特定字段与 select 的输出过滤掉已经存在的数据集。 (我相信这是问题所在)
我终于把过滤器的输出放到了日志分析中(这部分工作正常)
这是来自 Parse JSON 的数据大致的样子(只是没有任何真实数据的布局)
[
{
DATA,
"checkpoint": "UNIQUECODE",
DATA
},
{
DATA,
"checkpoint": "UNIQUECODE",
DATA
}
]
这是从 select 语句中得出的列表,需要与之进行比较以删除已经存在的记录:
[
"UNIQUECODE",
"UNIQUECODE",
"UNIQUECODE"
]
我相信我想出了一个优雅的解决方案。
"Filter_array": {
"inputs": {
"from": "@body('Parse_JSON')?['data']",
"where": "@not(contains(body('Select'), item()?['Checkpoint']))"
}
我希望这对使用过滤器阵列的其他人有所帮助。
试图使逻辑应用程序正常工作,但似乎无法完成最后一步 - 我过去有一个类似的逻辑应用程序可以通过这些步骤工作,但我记不起最后一步了使其正常运行的步骤。
感谢任何人提供的帮助。我在下面包含了一个屏幕截图和一些代码。
Logic app flow Picture
出于显而易见的原因,我已经编辑了一些代码。希望这足以让您大致了解正在发生的事情。
除了过滤器数组错误之外,每个步骤都很好,我尝试了过滤器数组的几种组合,但没有成功。
{
"definition": {
"$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
"actions": {
"Filter_array": {
"inputs": {
"from": "@body('Parse_JSON')?['data']",
"where": "@contains(item(), body('Select'))"
},
"runAfter": {
"Select": [
"Succeeded"
]
},
"type": "Query"
},
"For_each": {
"actions": {
"Send_Data": {
"inputs": {
"body": "@{items('For_each')}",
"headers": {
"Log-Type": "REDACTED"
},
"host": {
"connection": {
"name": "@parameters('$connections')['azureloganalyticsdatacollector']['connectionId']"
}
},
"method": "post",
"path": "/api/logs"
},
"runAfter": {},
"type": "ApiConnection"
}
},
"foreach": "@body('Filter_array')",
"runAfter": {
"Filter_array": [
"Succeeded"
]
},
"type": "Foreach"
},
"HTTP": {
"inputs": {
"headers": {
"Authorization": "API-Token REDACTED"
},
"method": "GET",
"queries": {
"start_date": "@variables('startDate')"
},
"uri": "REDACTED"
},
"runAfter": {
"Initialize_variable": [
"Succeeded"
]
},
"type": "Http"
},
"Initialize_variable": {
"inputs": {
"variables": [
{
"name": "startDate",
"type": "string",
"value": "@{addDays(utcnow(), -5, 'yyyy-MM-dd')}"
}
]
},
"runAfter": {},
"type": "InitializeVariable"
},
"Parse_JSON": {
"inputs": {
"content": "@body('HTTP')",
"schema": {
"properties": {
"body": {
"properties": {
"data": {
REDACTED
}
},
"type": "object"
},
"statusCode": {
"type": "integer"
}
},
"type": "object"
}
},
"runAfter": {
"HTTP": [
"Succeeded"
]
},
"type": "ParseJson"
},
"Run_query_and_list_results": {
"inputs": {
"body": "REDACTED",
"host": {
"connection": {
"name": "@parameters('$connections')['azuremonitorlogs']['connectionId']"
}
},
"method": "post",
"path": "/queryData",
"queries": {
"resourcegroups": “REDACTED”,
"resourcename": "REDACTED",
"resourcetype": "REDACTED",
"subscriptions": "REDACTED",
"timerange": "Last 7 days"
}
},
"runAfter": {
"Parse_JSON": [
"Succeeded"
]
},
"type": "ApiConnection"
},
"Select": {
"inputs": {
"from": "@body('Run_query_and_list_results')?['value']",
"select": "@item()?['checkpoint_s']"
},
"runAfter": {
"Run_query_and_list_results": [
"Succeeded"
]
},
"type": "Select"
}
},
"contentVersion": "1.0.0.0",
"outputs": {},
"parameters": {
"$connections": {
"defaultValue": {},
"type": "Object"
}
},
"triggers": {
"Recurrence": {
"recurrence": {
"frequency": "Hour",
"interval": 1
},
"type": "Recurrence"
}
}
},
"parameters": {
"$connections": {
"value": {
REDACTED
}
}
}
}
}
下面是上述代码在过滤器数组中生成的内容的屏幕截图
Filter Array Error
具体情况:
我做了一个 API 数据调用,我把它通过解析 JSON。 (这部分工作正常 - 除非解析 JSON 定义有问题但我认为没有)
然后我在日志分析中进行查找并使用 select 将其放入列表中(这部分工作正常)
然后我比较这两个数据集,并根据 API 数据中的特定字段与 select 的输出过滤掉已经存在的数据集。 (我相信这是问题所在)
我终于把过滤器的输出放到了日志分析中(这部分工作正常)
这是来自 Parse JSON 的数据大致的样子(只是没有任何真实数据的布局)
[
{
DATA,
"checkpoint": "UNIQUECODE",
DATA
},
{
DATA,
"checkpoint": "UNIQUECODE",
DATA
}
]
这是从 select 语句中得出的列表,需要与之进行比较以删除已经存在的记录:
[
"UNIQUECODE",
"UNIQUECODE",
"UNIQUECODE"
]
我相信我想出了一个优雅的解决方案。
"Filter_array": {
"inputs": {
"from": "@body('Parse_JSON')?['data']",
"where": "@not(contains(body('Select'), item()?['Checkpoint']))"
}
我希望这对使用过滤器阵列的其他人有所帮助。