使用JSONPath从不同级别提取节点

时间:2018-12-19 18:38:51

标签: jsonpath aws-step-functions json-path-expression

给出此文档:

{
  "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"
}

但是尽管进行了一天的搜索/实验,但我无法辨认出正确的咒语。

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

您可以使用Parameters定义用于输入任务的自定义/静态模式。流程如下所示: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
        }
    }
}