构建复杂的规则,将其序列化为json,并在python中执行
json_logic_qubit的Python项目详细描述
这个解析器接受JsonLogic规则和 在python中执行它们。
这是优秀的github项目的python移植 jwadhams对于javascript: json-logic-js。
所有的功劳都归于他,这只是一个相同的实现 python中的逻辑(下面的小差别)。
jsonlogic格式旨在允许您共享规则(逻辑) 在前端和后端代码之间(不考虑语言差异); 甚至在数据库中存储逻辑和记录。jsonlogic是 大量记录在JsonLogic.com, 包括每个supported operation和try out rules in your browser位置的示例。
同样的格式也可以由库在php中执行 json-logic-php
示例
简单
fromjson_logicimportjsonLogicjsonLogic({"==":[1,1]})# True
这是一个简单的测试,相当于1 == 1。关于 格式:
- 操作员始终处于“关键”位置。只有一把钥匙 根据jsonlogic规则。
- 这些值通常是一个数组。
- 每个值可以是字符串、数字、布尔值、数组(非关联), 或空
化合物
现在我们开始制定规则了。
jsonLogic({"and":[{">":[3,1]},{"<":[1,3]}]})# True
在中缀语言(如python)中,这可以写成:
((3>1)and(1<3))
数据驱动
显然,如果这些规则只能 静态文字数据。通常使用规则调用jsonLogic。 对象和数据对象。您可以使用var运算符获取 数据对象的属性:
jsonLogic({"var":["a"]},# Rule{a:1,b:2}# Data)# 1
如果您愿意,我们支持syntactic sugar一元 运算符跳过值周围的数组:
jsonLogic({"var":"a"},{a:1,b:2})# 1
还可以使用var运算符通过数字访问数组 索引:
jsonLogic({"var":1},["apple","banana","carrot"])# "banana"
这里有一个复杂的规则,它混合了文字和数据。馅饼还没做好 除非温度低于110度,否则就吃苹果。
rules={"and":[{"<":[{"var":"temp"},110]},{"==":[{"var":"pie.filling"},"apple"]}]}data={"temp":100,"pie":{"filling":"apple"}}jsonLogic(rules,data)# True
始终且从不
有时你想处理的规则是“总是”或“从不”。 传递给jsonLogic的第一个参数是非对象, 非关联数组,立即返回。
#AlwaysjsonLogic(True,data_will_be_ignored);# True#NeverjsonLogic(False,i_wasnt_even_supposed_to_be_here);# False