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

如何在Python中使用durable-rules加载JSON数据集并执行?

用durable-rules从JSON加载数据集并执行

完全可行,durable-rules原生支持JSON格式的事实数据和规则集的序列化/反序列化,下面分两种常见场景给出示例:

场景1:加载JSON格式的事实数据集

假设你已经将事实数据导出为dataset.json,内容如下:

[
    {"name": "Alice", "age": 30},
    {"name": "Bob", "age": 17},
    {"name": "Charlie", "age": 22}
]

代码示例

from durable.lang import *
import json

# 先定义规则集
with ruleset('age_check'):
    @when_all(m.age >= 18)
    def handle_adult(c):
        print(f"[规则触发] {c.m.name} 已成年")
    
    @when_all(m.age < 18)
    def handle_minor(c):
        print(f"[规则触发] {c.m.name} 未成年")

# 读取JSON数据集
with open('dataset.json', 'r', encoding='utf-8') as f:
    fact_dataset = json.load(f)

# 遍历数据集,逐个提交事实并触发规则
for fact in fact_dataset:
    post('age_check', fact)

场景2:加载JSON格式的规则集+事实数据集

如果你的JSON不仅包含事实数据,还包含规则定义,也可以直接加载规则集:

规则集JSON示例(ruleset.json)

{
    "name": "age_check",
    "rules": [
        {
            "all": [{"age": {"$gte": 18}}],
            "run": "handle_adult"
        },
        {
            "all": [{"age": {"$lt": 18}}],
            "run": "handle_minor"
        }
    ]
}

代码示例

from durable.lang import *
import json

# 定义规则对应的处理函数(需与JSON规则中指定的函数名一致)
def handle_adult(c):
    print(f"[规则触发] {c.m.name} 已成年")

def handle_minor(c):
    print(f"[规则触发] {c.m.name} 未成年")

# 加载JSON规则集
with open('ruleset.json', 'r', encoding='utf-8') as f:
    ruleset_data = json.load(f)
    load_ruleset(ruleset_data)

# 加载并提交事实数据集
with open('dataset.json', 'r', encoding='utf-8') as f:
    fact_dataset = json.load(f)

for fact in fact_dataset:
    post('age_check', fact)

注意事项

  • 事实数据的字段需与规则集中定义的字段匹配,否则规则无法正确触发
  • 加载JSON规则集时,对应的处理函数必须提前在代码中定义,且函数名要与JSON中的run字段一致
  • 确保JSON格式符合durable-rules的语法要求,比如规则条件中的运算符($gte、$lt等)要与框架规范一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 15:55:14