首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有多层密钥的Rego object.get

具有多层密钥的Rego object.get
EN

Stack Overflow用户
提问于 2020-03-06 21:40:54
回答 1查看 659关注 0票数 1

有什么方法可以使用带有多级密钥的object.get ..?

我的输入如下:{ "pipelineParameters" : { "k8" : { "NODES" : "1" }, "ec2": { "NODES" : "0" } }

我的数据看起来像{ "key": "pipelineParameters.k8.NODES" }

如何基于多级键从输入中求值?

样本代码

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-12 20:15:23

object.get函数不支持多级键.如果将键表示为数组,则可以使用walk函数:

代码语言:javascript
复制
input = {
    "pipelineParameters" : {
        "k8" : {
            "NODES" : "1"
        },
        "ec2": {
           "NODES" : "0"
        }
    }
}

例如:

代码语言:javascript
复制
> 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" |
+-----+-------+

要将密钥转换为数组,只需编写:

代码语言:javascript
复制
split(key, ".")

例如:

代码语言:javascript
复制
split("pipelineParameters.k8.NODES", ".")
[
  "pipelineParameters",
  "k8",
  "NODES"
]

把这一切结合在一起:

代码语言:javascript
复制
> walk(input, [split("pipelineParameters.k8.NODES", "."), x])
+-----+
|  x  |
+-----+
| "1" |
+-----+
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60571982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档