繁体   English   中英

REGO 如何获取与模式匹配的 object(映射)键

[英]REGO how to get object (map) keys that match a pattern

使用开放策略代理(OPA) “规则”语言Rego并给出以下数据:

{
    "x-foo": "a",
    "x-bar": "b",
    "y-foo": "c",
    "y-bar": "d"
}

什么是正确的 Rego 表达式或语句来获取以“x-”开头的键? 也就是说,我想要一个数组

[ "x-foo", "x-bar" ]

我知道startswith() function,我已经尝试了各种理解的尝试,但无论我尝试什么,我都无法让它工作。

任何帮助将非常感激。

理解格式

mm = {
    "x-foo": "a",
    "x-bar": "b",
    "y-foo": "c",
    "y-bar": "d"
    }
x_keys = [key for key in mm.keys() if key.startswith('x')]
print(x_keys)

或者

mm = {
    "x-foo": "a",
    "x-bar": "b",
    "y-foo": "c",
    "y-bar": "d"
    }

for i in mm.keys():
    if i.startswith('x'):
        print(i)

希望这个对你有帮助。

这可以通过使用如您所建议的理解或生成 set的部分规则来完成:

x_foo_comprehension := [key | object[key]; startswith(key, "x-")]

x_foo_rule[key] {
    object[key]
    startswith(key, "x-")
}

最后,如果需要考虑嵌套键,可以使用内置的 walk 遍历 object:

x_foo_rule[key] {
    walk(object, [path, value])
    last := path[count(path) - 1]
    startswith(last, "x-")
    key := concat(".", path)
}

# x_foo_rule == {
#     "x-bar",
#     "x-foo",
#     "y-bar.x-bar",
#     "y-bar.x-foo"
# ]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM