使用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
}
}
}
鉴于此文档:
{
"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
}
}
}