使用JSONPath提取不同层级的节点

Use JSONPath to extract nodes from different levels

鉴于此文档:

{
  "k1": "v1",
  "k2": "v2",
  "k3": "v3",
  "k4": {
    "k4.1": "v4.1",
    "k4.2": "v4.2",
    "k4.3": "v4.3"
  }
}

我需要提取这个子集,格式如下:

{
  "k2": "v2",
  "k3": "v3",
  "k4.1": "v4.1"
  "k4.2": "v4.2"
}

但是尽管 searching/experimenting 一天多了,我还是无法辨别正确的咒语。

这个表达式:$['k2', 'k3'] 给了我两个顶级元素:

{
  "k2" : "v2",
  "k3" : "v3"
}

这个表达式:$['k4']['k4.1','k4.2'] 给出了两个嵌套元素:

{
  "k4.1" : "v4.1",
  "k4.2" : "v4.2"
}

但是如何将这两个表达式组合成一个包含多个级别结果的表达式呢?

不幸的是,我使用的工具 (AWS State Language paths) 的性质要求使用单个 xpath 表达式完成此操作。

我认为它不起作用的原因是 Path 只指定了一个路径,你不能在一个表达式中附加多个路径。

您可以使用 Parameters 为任务输入定义 custom/static 模式。流程如下State-Input->InputPath->Parameters。

使用您提供的输入和一个仅回显输入的 Lambda 函数,以下对我有用:

{
    "StartAt": "HelloWorld",
    "States": {
        "HelloWorld": {
            "Type": "Task",
            "Resource": "arn:aws:lambda:us-east-1:XXXXXXXXX:function:LambdaFunctionToEchoInput",
            "Parameters": {
                "k2.$": "$.k2",
                "k3.$": "$.k3",
                "k4.1.$": "$.k4.['k4.1']",
                "k4.2.$": "$.k4.['k4.2']"
            },
            "End": true
        }
    }
}