Используйте JSONPath для извлечения узлов разных уровней - PullRequest
0 голосов
/ 19 декабря 2018

Учитывая этот документ:

{
  "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 ) требует, чтобы это было сделано с одним выражением xpath.

1 Ответ

0 голосов
/ 20 декабря 2018

Я думаю, что причина, по которой он не работает, заключается в том, что 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
        }
    }
}
...