Re go object.get с многоуровневым ключом - PullRequest
1 голос
/ 07 марта 2020

есть ли способ использовать object.get с многоуровневой клавишей ..?

Мой ввод выглядит следующим образом: { "pipelineParameters" : { "k8" : { "NODES" : "1" }, "ec2": { "NODES" : "0" } }

мои данные выглядят как { "key": "pipelineParameters.k8.NODES" }

Как получить значение из ввода на основе многоуровневого ключа

Пример кода

https://play.openpolicyagent.org/p/iR15XnMctP

1 Ответ

1 голос
/ 12 марта 2020

Функция object.get не поддерживает многоуровневые клавиши. Вы можете использовать функцию walk для этого, если вы представляете ключ в виде массива:

input = {
    "pipelineParameters" : {
        "k8" : {
            "NODES" : "1"
        },
        "ec2": {
           "NODES" : "0"
        }
    }
}

Например:

> walk(input, [["pipelineParameters", "k8", "NODES"], "1"])
true
> walk(input, [["pipelineParameters", "k8",  "NODES"], x])
+-----+
|  x  |
+-----+
| "1" |
+-----+
> walk(input, [["pipelineParameters", y,  "NODES"], x])
+-----+-------+
|  x  |   y   |
+-----+-------+
| "1" | "k8"  |
| "0" | "ec2" |
+-----+-------+

Для преобразования вашего ключа в массив можно просто написать:

split(key, ".")

Например:

split("pipelineParameters.k8.NODES", ".")
[
  "pipelineParameters",
  "k8",
  "NODES"
]

Собрать все вместе:

> walk(input, [split("pipelineParameters.k8.NODES", "."), x])
+-----+
|  x  |
+-----+
| "1" |
+-----+
...