构建复杂的规则,将其序列化为json,并在python中执行

json_logic_qubit的Python项目详细描述


这个解析器接受JsonLogic规则和 在python中执行它们。

这是优秀的github项目的python移植 jwadhams对于javascript: json-logic-js

所有的功劳都归于他,这只是一个相同的实现 python中的逻辑(下面的小差别)。

jsonlogic格式旨在允许您共享规则(逻辑) 在前端和后端代码之间(不考虑语言差异); 甚至在数据库中存储逻辑和记录。jsonlogic是 大量记录在JsonLogic.com, 包括每个supported operationtry out rules in your browser位置的示例。

同样的格式也可以由库在php中执行 json-logic-php

示例

简单

fromjson_logicimportjsonLogicjsonLogic({"==":[1,1]})# True

这是一个简单的测试,相当于1 == 1。关于 格式:

  1. 操作员始终处于“关键”位置。只有一把钥匙 根据jsonlogic规则。
  2. 这些值通常是一个数组。
  3. 每个值可以是字符串、数字、布尔值、数组(非关联), 或空

化合物

现在我们开始制定规则了。

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

安装

安装此库的最佳方法是通过 PIP

pip install json-logic-qubit

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何使用Ibatis在插入时返回ID(使用返回关键字)   java(org.hibernate.TransactionException)org。冬眠TransactionException:事务未成功启动   java小程序jwindow始终位于JNLP顶部   在Java中重新解析JSON对象?   java单击后将ListView数据移动到新屏幕   Mule ESB中的java WSA寻址特性   Java,对象编程:获取返回0值的方法   hibernate的Java通用问题,如何处理T get(K id)   java在使用超级CSV读取CSV时忽略引用   ssh使用Java远程运行命令   java如何向具体用户发送websocket消息?   在JAVA中,我可以在不指定的情况下使用条件运算符吗?