问题描述
我们正在尝试将 hylang 作为 DSL 用于某些金融业务流程。我们试图将业务规则用作 JSON,但切换到使用 hy 语言的 DSL。现在我们需要像以前的 JSON-B 项目一样将 s-expression 项目持久化到 postgresql 中。有没有标准的方法来做到这一点,或者我们必须使用文本字段?
上一个:
"conditions": {
"all": [
{
"name": "order_create_date","value": 1620675000,"operator": "greater_than_or_equal_to"
},{
"name": "order_create_date","value": 1624217400,"operator": "less_than_or_equal_to"
}
}
当前:
(defn check_condition [params] (
and (> params.order_create_date "2021/06/22") (< params.order_create_date "2021/07/22"))
)
解决方法
确实没有标准的方法可以做到这一点;在 Hy 或 Postgres 方面没有实现任何特别的东西。除非你有大量的这些,或者它们非常大,或者你想对它们进行某种花哨的搜索或索引,将它们存储为文本应该很好。事实上,我更喜欢平面文件而不是数据库。
另一种选择是利用 Postgres 的 JSON 支持并设计您自己的小方法来在 Hy 模型树和 JSON 之间进行转换。例如,Hy 表达式可以表示为 JSON 数组。 Python 的 json
库可以帮助解决这个问题,例如default
的 JSONEncoder
参数。