代码之家  ›  专栏  ›  技术社区  ›  Popoi Menenet

AWS步骤函数:Function.length()在选择状态的变量字段中返回错误

  •  10
  • Popoi Menenet  · 技术社区  · 8 年前

    我在AWS步长函数中有一个选择状态,它将比较数组的长度和输入,并决定进入下一个状态。

    length() 函数返回了一个错误,以获取数组的长度:

    {

    “cause”:“执行状态‘CheckItemsCountState’(在事件id#18处输入)时出错。路径$.Metadata[2]无效。Items.length()':选项状态的条件路径引用了无效值。”

    }

         "CheckItemsCountState":{  
             "Type": "Choice",
             "InputPath": "$",
             "OutputPath": "$",
             "Default": "NoItemsState",
             "Choices":[  
                {  
                   "Variable": "$.Metadata[2].Items.length()",
                   "NumericGreaterThan": 0,
                   "Next": "ProcessState"
                }
             ]
          },
    

    {
      "Metadata": [
        {
          "foo": "name"
        },
        {
          "Status": "COMPLETED"
        },
        {
          "Items": []
        }
      ]
    }
    

    Items 在里面 Metadata[2] 如果该值大于0,则进行比较。

    我试图验证JsonPath $.Metadata[2].Items.length() 在这个 website

    我不确定我是否错过了什么。我在AWS Step函数的文档或示例中找不到关于在jsonpath中使用函数的任何信息。

    如果能得到任何帮助,我将不胜感激。非常感谢。

    2 回复  |  直到 5 年前
        1
  •  10
  •   John Veldboom Jamie Starke    8 年前

    Choice Rules documentation :

    对于这些运算符中的每一个,相应的值必须为

    {
      "Metadata": [
        {
          "foo": "name"
        },
        {
          "Status": "COMPLETED"
        },
        {
          "Items": [],
          "ItemsCount": 0
        }
      ]
    }
    

    然后在步骤功能选择步骤中:

    "CheckItemsCountState":{  
        "Type": "Choice",
        "InputPath": "$",
        "OutputPath": "$",
        "Default": "NoItemsState",
        "Choices":[  
            {  
                "Variable": "$.Metadata[2].ItemsCount",
                "NumericGreaterThan": 0,
                "Next": "ProcessState"
            }
        ]
    },
    
        2
  •  2
  •   Abhijeet Ahuja    5 年前

    一种可能的方法是检查零索引,如果您只想检查它是否为非空数组。

    你可以这样做

    "CheckItemsCountState":{  
         "Type": "Choice",
         "InputPath": "$",
         "OutputPath": "$",
         "Default": "NoItemsState",
         "Choices":[
           {
             "And": [
               {
                "Variable": "$.Metadata[2].Items",
                "IsPresent": true
               },
               {
                 "Variable": "$.Metadata[2].Items[0]",
                 "IsPresent": true
               }
             ],
            "Next": "ProcessState"
           }
         ]
      }