Rego object.get с многоуровневым ключом
Есть ли способ использовать object.get с многоуровневым ключом..?
Мой ввод выглядит так:{
"pipelineParameters" : {
"k8" : {
"NODES" : "1"
},
"ec2": {
"NODES" : "0"
}
}
мои данные выглядят как
{
"key": "pipelineParameters.k8.NODES"
}
Как получить значение из ввода на основе многоуровневого ключа
Образец кода
1 ответ
Решение
В 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" |
+-----+