Используйте JSONPath для извлечения узлов разных уровней
Учитывая этот документ:
{
"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) требует, чтобы это делалось с помощью одного выражения xpath.
1 ответ
Я думаю, что причина, по которой он не работает, заключается в том, что Path указывает только один путь, вы не можете добавить несколько путей в одном выражении.
Вы можете использовать параметры для определения пользовательской / статической схемы для ввода в задачу. Процесс выглядит следующим образом: State-Input->InputPath->Parameters.
Используя введенный вами ввод и лямбда-функцию, которая просто повторяет ввод, у меня сработало следующее:
{
"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
}
}
}