Representing logic as data in JSON

前端 未结 12 1469
眼角桃花
眼角桃花 2021-01-29 21:37

For business reasons we need to externalize some conditional logic into external files: preferably JSON.

A simple filter-by scenario could be handled by adding a node a

12条回答
  •  一向
    一向 (楼主)
    2021-01-29 22:13

    If you must implement this using standard JSON, i'd recommend something akin to Lisp's "S-expressions". A condition could be either a plain object, or an array whose first entry is the logical operation that joins them.

    For example:

    ["AND",
        {"var1" : "value1"},
        ["OR",
            { "var2" : "value2" },
            { "var3" : "value3" }
        ]
    ]
    

    would represent var1 == value1 AND (var2 == value2 OR var3 == value3).

    If you prefer brevity over consistency, you could also allow an object to have multiple properties, which would implicitly be joined by an AND. For example, { "a": "b", "c": "d" } would be equivalent to ["AND", { "a": "b" }, { "c": "d" }]. But there are cases (like the example) where the former syntax can not faithfully represent the condition as written; you'd need additional trickery like translating the condition or using dummy property names. The latter syntax should always work.

提交回复
热议问题