REGO 如何获取与模式匹配的对象(映射)键
REGO how to get object (map) keys that match a pattern
使用 Rego, the Open Policy Agent (OPA)“规则”语言,并给出以下数据:
{
"x-foo": "a",
"x-bar": "b",
"y-foo": "c",
"y-bar": "d"
}
仅获取以“x-”开头的键的正确 Rego 表达式或语句是什么?也就是说,我想要一个
的数组
[ "x-foo", "x-bar" ]
我知道 startswith()
函数,并且我在 comprehensions 上尝试过各种尝试,但无论我尝试什么我都无法让它工作。
如有任何帮助,我们将不胜感激。
理解格式
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)
我希望你觉得这有用。
这可以通过使用理解来完成,就像你建议的那样,或者使用 generates a set:
的部分规则
x_foo_comprehension := [key | object[key]; startswith(key, "x-")]
x_foo_rule[key] {
object[key]
startswith(key, "x-")
}
最后,如果需要考虑嵌套键,可以使用内置的walk来遍历对象:
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"
# ]
使用 Rego, the Open Policy Agent (OPA)“规则”语言,并给出以下数据:
{
"x-foo": "a",
"x-bar": "b",
"y-foo": "c",
"y-bar": "d"
}
仅获取以“x-”开头的键的正确 Rego 表达式或语句是什么?也就是说,我想要一个
的数组[ "x-foo", "x-bar" ]
我知道 startswith()
函数,并且我在 comprehensions 上尝试过各种尝试,但无论我尝试什么我都无法让它工作。
如有任何帮助,我们将不胜感激。
理解格式
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)
我希望你觉得这有用。
这可以通过使用理解来完成,就像你建议的那样,或者使用 generates a set:
的部分规则x_foo_comprehension := [key | object[key]; startswith(key, "x-")]
x_foo_rule[key] {
object[key]
startswith(key, "x-")
}
最后,如果需要考虑嵌套键,可以使用内置的walk来遍历对象:
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"
# ]