跳转到主要内容

构建复杂规则,将它们序列化为JSON,并在Python中执行

项目描述

此解析器接受JsonLogic规则并在Python中执行它们。

这是json-logic-py的分支,由nadir.izr创建,它是jwadhams为JavaScript编写的GitHub项目的Python移植:json-logic-js

JsonLogic格式旨在允许您在前后端代码(无论语言差异)之间共享规则(逻辑),甚至可以将逻辑与数据库中的记录一起存储。JsonLogic在JsonLogic.com上进行了广泛记录,包括每个支持的操作的示例以及一个可以在浏览器中尝试规则的地方。

相同的格式也可以通过库json-logic-php在PHP中执行

示例

简单

from json_logic import jsonLogic
jsonLogic( { "==" : [1, 1] } )
# True

这是一个简单的测试,相当于1 == 1。关于格式的一些注意事项

  1. 运算符始终位于“键”位置。每个JsonLogic规则只有一个键。

  2. 值通常是数组。

  3. 每个值可以是字符串、数字、布尔值、数组(非关联数组)或null

复合

这里我们开始嵌套规则。

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

如果您喜欢,我们支持在一元运算符上使用 语法糖 以跳过值周围的数组

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

日期

您可以使用 date 操作符将日期包含在 json 逻辑中。日期在内部被转换为 datetime.date 对象,然后执行比较。

rule = {"<=": [{"date": {"var": "testDate"}}, {"date": "2021-01-01"}]}
data = {"testDate": "2020-01-01"}

jsonLogic(rule, data)
# True

运算符 {"today": []} 获取当前日期。您还可以向日期添加/减去年。这是使用 dateutilsrelativedelta 来实现的。

rule = {"-": [{"date": "2021-01-01"}, {"years": 18}]}

jsonLogic(rule)
# date(2003, 1, 1)

日期时间

您可以使用 datetime 操作符将日期时间包含在 json 逻辑中。日期时间在内部被转换为 datetime.datetime 对象,然后执行比较。

rule = {
    "<=": [
        {"datetime": {"var": "testDatetime"}},
        {"datetime": "2022-12-01T10:00:00.000+02:00"},
    ]
}
data = {"testDatetime": "2022-11-01T10:00:00.000+02:00"}

jsonLogic(rule, data)
# True

总是和从不

有时您想要处理的规则是“总是”或“从不”。如果传递给 jsonLogic 的第一个参数不是对象或非关联数组,它将立即返回。

#Always
jsonLogic(True, data_will_be_ignored);
# True

#Never
jsonLogic(False, i_wasnt_even_supposed_to_be_here);
# False

安装

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

pip install json-logic

如果这不适合您,并且您想自己管理更新,整个库都包含在 json_logic.py 中,您可以根据需要将其直接下载到项目中。

curl -O https://raw.githubusercontent.com/nadirizr/json-logic-py/master/json_logic.py

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪一个,请了解更多关于 安装包 的信息。

源分发

maykin-json-logic-py-0.13.0.tar.gz (17.6 kB 查看哈希值)

上传时间

构建分发

maykin_json_logic_py-0.13.0-py3-none-any.whl (11.2 kB 查看哈希值)

上传时间 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面