我们正在尝试使用hylang作为DSL的一些金融业务流程。我们试图使用业务规则作为JSON,但是使用hy语言切换到DSL。现在,我们需要像以前的JSON项一样将s-表达式项持久化到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")))
发布于 2021-05-22 09:14:57
有两种解决办法:
以pp import json = pp.Literal("(").suppress() RP = pp.Literal(")").suppress() String = pp.Word(pp.alphanums + '_,.@@<>=+=/*%[]) SingleQuoteString = pp.QuotedString(quoteChar="'",unquoteResults=False) DoubleQuoteString =pp.QuotedString(quoteChar=‘,( unquoteResults=False) QuotedString = SingleQuoteString DoubleQuoteString Atom = String DoubleQuoteString SExpr = pp.Forward() SExprList = pp.Group(pp.ZeroOrMore(SExpr Atom)) SExpr << (LP + SExprList + RP) def to_json(expr: str) -> str: Re返回json.dumps(SExpr.parseString(Expr)json.dumps() def (val: str) #EN20# str: if isinstance(val,val)列表):返回f"({‘'.join(from_json(e) for e in val)}“,否则:返回str(val)
发布于 2021-05-18 12:12:41
确实没有标准的方法来做到这一点;在Hy或Postgres方面没有实施任何特别的措施。除非你有大量的这样的东西,或者它们很大,或者你想对它们做一些花哨的搜索或索引,否则把它们作为文本存储应该会很好。事实上,与数据库相比,我更喜欢这方面的平面文件。
另一种选择是利用Postgres的JSON支持,并为Hy模型树和JSON之间的转换设计自己的小方法。例如,Hy表达式可以表示为JSON数组。Python的json库可以在例如JSONEncoder的default参数中提供帮助。
https://stackoverflow.com/questions/67585404
复制相似问题