如何使用JSONPath创建一个供AWS Step Functions使用的JSON对象?

3

我正在使用AWS步骤函数,尝试从任务结果中仅选择特定数据。出于某些难以理解的原因,AWS选择不允许在步骤函数中使用Query,因此我正在使用ResultsSelector。但是,我对所需的JSONPath感到困惑。

如何使用ResultsSelector构建所需的JSON对象?

以这个结果为例 -

{
    "IsTruncated": false,
    "KeyMarker": "",
    "MaxKeys": 1000,
    "Name": "some-bucket-name",
    "Prefix": "some/prefix/",
    "VersionIdMarker": "",
    "Versions": [
        {
            "ETag": "\"02e9c20b7cd36fcf6e47926c26f0b39e\"",
            "IsLatest": true,
            "Key": "some/prefix/my.file",
            "LastModified": "2021-09-30T15:34:59Z",
            "Owner": {
                "Id": "1fd170056d1480a7c1c9b43f5bf0603d91cbabc4ec77eefdcaa10218c3a920f6"
            },
            "Size": 69606,
            "StorageClass": "STANDARD",
            "VersionId": "y6XzRsCUZcXMPHqwwnhAGLwTlmPoj9dj"
        },
        {
            "ETag": "\"01bc5b65afe6b0cc0722fc5da32a8a44\"",
            "IsLatest": false,
            "Key": "some/prefix/my.file",
            "LastModified": "2021-09-30T15:34:21Z",
            "Owner": {
                "Id": "1fd170056d1480a7c1c9b43f5bf0603d91cbabc4ec77eefdcaa10218c3a920f6"
            },
            "Size": 69407,
            "StorageClass": "STANDARD",
            "VersionId": "jPdKeUqnYlf0_eNXzHaYCvDfdHLOvRX7"
        }
    ]
}

我希望使用ResultsSelector来构建这个JSON对象 -
{
    "Objects": [
        {
            "Key": "some/prefix/my.file",
            "VersionId": "y6XzRsCUZcXMPHqwwnhAGLwTlmPoj9dj"
        },
        {
            "Key": "some/prefix/my.file",
            "VersionId": "jPdKeUqnYlf0_eNXzHaYCvDfdHLOvRX7"
        }
    ]
}

然而,到目前为止,我能够做到的最接近的方法是使用这个 -
{
  "Key.$": "$.Versions[*].Key",
  "VersionId.$": "$.Versions[*].VersionId"
}

这让我得到了这个 -
{
  "VersionId": [
    "y6XzRsCUZcXMPHqwwnhAGLwTlmPoj9dj",
    "jPdKeUqnYlf0_eNXzHaYCvDfdHLOvRX7",
  ],
  "Key": [
    "some/prefix/my.file",
    "some/prefix/my.file"
  ]
}
1个回答

2
Jayway JsonPath 实现提供了带有键的输出。您需要验证 AWS Step function 是否支持以下 jsonpath

工具:https://jsonpath.herokuapp.com/

$.Versions[*].['Key','VersionId']

enter image description here

如果它能够正常工作,那么你可以这样做:

"Objects.$": "$.Versions[*].['Key','VersionId']",

谢谢,我之前不知道Jayway JSONPath,看起来很好用。我尝试在https://jsonpath.com/上使用完全相同的路径,但它显示“无匹配项”,所以我认为它是无效的! - David Gard
1
我相信AWS步骤函数使用Jayway JSONPath实现,因为超链接导航到相同的GitHub路径。 [AWS Step functions Paths](https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-paths.html) - Akshay G

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接