How to use if-then-else and loop construct in input transformer in EventBridge?

0

Is there a way to define if-then-else and looping constructs using JSONPath, while defining the configuring the "input path" for EventBridge Input Transformer?

E.g. For the following input

{
            "category": {
              "name": "Nike Shoes",
              "level": 2,
              "translation": null,
              "ancestors": {
                "edges": [
                  {
                    "node": {
                      "name": "Shoes",
                      "slug": "shoes",
                      "level": 0
                    }
                  },
                  {
                    "node": {
                      "name": "Running Shoes",
                      "slug": "running-shoes",
                      "level": 1
                    }
                  }
                ]
              }
            }
}

I need the output to be

{
    "categories.lvl0": "Shoes",
    "categories.lvl1": "Shoes > Running shoes",
    "categories.lvl2": "Shoes > Running shoes > Nike shoes",
}

The following is the python logic for the output I wish to achieve

if node["category"]["level"] != 0:
    category_hierarchy = list(map(lambda x: x["node"]["name"], node["category"]["ancestors"]["edges"]))
    category_hierarchy.append(new_item["categoryName"])
    for i in range(len(category_hierarchy)):
        new_item[f'categories.lvl{i}'] = " > ".join(category_hierarchy[0:i+1])

if the level of the main category ("Nike shoes" here) is not equal to 0, then I want to loop through its ancestors and define variables of the form categories.lvl(n) with the logic defined in column 2 below, to get the values defined in column 3

VariableLogicValue required
category.lvl0ancestor category with level 0Shoes
category.lvl1ancestor category with level 0 > ancestor category with level 1Shoes> Running shoes
category.lvl2ancestor category with level 0 > ancestor category with level 1 > main category (with level 0)Shoes> Running shoes > Nike shoes

I could frame the following JSONPath construct for now, which in plain English, represents:

"if the category level is 0, then proceed to output names of the ancestor categories"

JSONPath - $..edges[?(@.level!=0)]..name Output

[
  "Shoes",
  "Running shoes"
]

However, I am not sure how to proceed further.

  • Not sure but it does not seem JSONpath can do what you want to do easily. How about using Lambda with the Python snippet and send the result to EventBridge?

satvik
已提問 2 年前檢視次數 142 次
沒有答案

您尚未登入。 登入 去張貼答案。

一個好的回答可以清楚地回答問題並提供建設性的意見回饋,同時有助於提問者的專業成長。

回答問題指南