web-dev-qa-db-ja.com

AWSステップ関数でARRAY内のJSONPATHの使用方法

私はAWSステップ関数を書いています、そして一方のステップのために、私はその入力の1つとして配列を受け入れるラムダを呼び出したいと思います。ただし、jsonPathを配列に渡しようとすると、取得します

The value for the field 'arrayField.$' must be a STRING that contains a JSONPath but was an ARRAY
 _

私のステップ関数の定義:

{
  "StartAt": "First",
  "States": {
  "First": {
    "Type": "Pass",
    "Parameters": {
      "type": "person"
    },
    "ResultPath": "$.output",
    "Next": "Second"
  },
    "Second": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:us-east-1:<aws_id>:function:MyFunction",
      "Parameters": {
        "regularParameter": "some string",
        "arrayParameter.$": ["$.output.type"]
      },
      "Next": "Succeed"
    },
    "Succeed": {
      "Type": "Succeed"
    }
  }
}
 _

配列内でJSONPATHを使用する方法は?

8
alexgbelov

多くの答えが正しく指摘されているので、それを正確に必要とする方法は不可能です。しかし、私は別の解決策を提案するでしょう:辞書の配列。それはあなたが必要とするものではありませんが、ネイティブでハッキーではありません。

"Second": {
  "Type": "Task",
  "Resource": "arn:aws:lambda:us-east-1:<aws_id>:function:MyFunction",
  "Parameters": {
    "regularParameter": "some string",
    "arrayParameter": [{"type.$": "$.output.type"}]
  },
  "Next": "Succeed"
},
 _

結果はされます

{
  "regularParameter": "some string",
  "arrayParameter": [{"type": "SingleItemWrappedToAnArray"}]
}
 _
0
Trilliput

これにアプローチするもう1つの方法は、オブジェクトの配列を出力してからJSONPATHを使用してそれを単純な配列に変換する並列状態を使用することです。

{
  "StartAt": "Parallel",
  "States": {
    "Parallel": {
      "Type": "Parallel",
      "Next": "Use Array",
      "ResultPath": "$.items",
      "Branches": [
        {
          "StartAt": "CreateArray",
          "States": {
            "CreateArray": {
              "Type": "Pass",
              "Parameters": {
                "value": "your value"
              },
              "End": true
            }
          }
        }
      ]
    },
    "Use Array": {
      "Type": "Pass",
      "Parameters": {
        "items.$": "$.items[*].value"
      },
      "End": true
    }
  }
}
 _

この例では、並列状態は次のJSONを出力します。

{
  "items": [
    {
      "value": "your value"
    }
  ]
}
 _

そして、「Array」状態を生成する:

{
  "items": [
    "your value"
  ]
}
 _
0