构建复杂的规则,将其序列化为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第三方库


热门话题
无法将XML加载到属性对象Java中   java如何判断当前线程是否为事件分派线程   java如何在带有CouchbaseTemplate的Spring数据Couchbase中使用密钥前缀   java将JSON数组存储在不同的列表或数组中   java OpenCV检测最大矩形会产生令人费解的结果   java正则表达式获取选项卡式值及其频率   安卓致命异常:主java。lang.NullPointerException   java有没有一种方法可以使用CLI(命令行界面)使用junit测试用例测试我的项目的jar文件?   Java数组属性   java我应该升级到CGLIB 3.0吗?   用户界面什么Java GUI框架适合第一个GUI项目?   java如何使用tomcat、mysql和jdbc驱动程序在internet上发布我的jsp项目   java计数字符串中非重叠出现的次数   通用域名格式。太阳网httpserver Java httpserver基本身份验证问题   java Android WebView:只显示网页的一半   将json字符串转换为java中的对象列表   io使用Java在目录中查找第一个文件   if语句如何在java游戏中使用switch和case?