【问题标题】:Rego object.get with multileve keyRego object.get 与多级键
【发布时间】:2020-03-06 21:40:54
【问题描述】:

有没有办法使用 object.get 与多级键..?

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

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

如何根据多级键从输入中获取价值

示例代码

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

【问题讨论】:

    标签: open-policy-agent rego


    【解决方案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" |
    +-----+
    

    【讨论】:

    • 谢谢。我没有检查 18.0 文档。它对我有用
    猜你喜欢
    • 2012-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多