如何在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
相关产品推荐
相关产品推荐

