如何使用过滤器数组过滤来自 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

具体情况:

  1. 我做了一个 API 数据调用,我把它通过解析 JSON。 (这部分工作正常 - 除非解析 JSON 定义有问题但我认为没有)

  2. 然后我在日志分析中进行查找并使用 select 将其放入列表中(这部分工作正常)

  3. 然后我比较这两个数据集,并根据 API 数据中的特定字段与 select 的输出过滤掉已经存在的数据集。 (我相信这是问题所在)

  4. 我终于把过滤器的输出放到了日志分析中(这部分工作正常)


这是来自 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']))"
                }

我希望这对使用过滤器阵列的其他人有所帮助。