You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OPA中遍历嵌套JSON并按Status分类生成列表的技术问询

正确的OPA Rego实现:按Status拆分列表

首先给出可直接运行的正确Rego代码:

package play

# 收集所有Status为"Done"的Name
done_list = [x.Name | x := input.data.list[_]; x.Status == "Done"]

# 收集所有Status不为"Done"的Name(包括空字符串、null)
other_list = [x.Name | x := input.data.list[_]; not x.Status == "Done"]

# 定义测试返回结构
test_return = {
    "done_list": done_list,
    "other_list": other_list
}

关键说明:

  • 你尝试的列表推导式思路是对的,但需要修正语法细节:
    1. Rego中判断相等使用==,单个=仅用于变量绑定,不能做相等判断
    2. 使用not x.Status == "Done"比x.Status != "Done"更严谨,能覆盖Status为null、空字符串等所有非"Done"的场景
    3. 无需设置default done_list := [],当没有匹配元素时,列表推导式会自动返回空列表,和默认值效果一致

为什么之前的append写法无效?

Rego是声明式语言,和命令式的Python逻辑不同,不存在append这种修改变量的操作。你需要通过声明规则来描述列表元素的条件,而非一步步执行添加动作。

测试输出

传入你提供的输入数据时,test_return会生成期望的结果:

{
  "done_list": ["abc", "def"],
  "other_list": ["ghi", "jkl", "mno"]
}

内容的提问来源于stack exchange,提问作者m12345

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 04:10:37