首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将hylang的表达式序列化为PostgreSQL json/json?

如何将hylang的表达式序列化为PostgreSQL json/json?
EN

Stack Overflow用户
提问于 2021-05-18 11:37:14
回答 2查看 158关注 0票数 2

我们正在尝试使用hylang作为DSL的一些金融业务流程。我们试图使用业务规则作为JSON,但是使用hy语言切换到DSL。现在,我们需要像以前的JSON项一样将s-表达式项持久化到postgreSQL中。是否有一种标准的方法来做到这一点,或者我们必须使用文本字段代替?

以前:

代码语言:javascript
复制
  "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"
        }
  }

当前:

代码语言:javascript
复制
(defn check_condition [params] (
                            and (> params.order_create_date "2021/06/22") (< params.order_create_date "2021/07/22"))

)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-05-22 09:14:57

有两种解决办法:

  1. 使用诸如“sexpdata”之类的库来解析和取消解析sexpdata到/从Python列表,然后使用JSON加上一些自定义enc/dec.

  1. 将S-表达式解析为Python,然后使用json。

以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)

票数 1
EN

Stack Overflow用户

发布于 2021-05-18 12:12:41

确实没有标准的方法来做到这一点;在Hy或Postgres方面没有实施任何特别的措施。除非你有大量的这样的东西,或者它们很大,或者你想对它们做一些花哨的搜索或索引,否则把它们作为文本存储应该会很好。事实上,与数据库相比,我更喜欢这方面的平面文件。

另一种选择是利用Postgres的JSON支持,并为Hy模型树和JSON之间的转换设计自己的小方法。例如,Hy表达式可以表示为JSON数组。Python的json库可以在例如JSONEncoderdefault参数中提供帮助。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67585404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档