出于业务原因,我们需要将一些条件逻辑外部化到外部文件中:最好是 JSON。
一个简单的过滤场景可以通过添加一个节点来处理,如下所示:
"filter": [
{
"criteria": "status",
"value": "open",
"condition": "=="
}
]
数组中的附加值可以处理多个条件。
"filter": [
{
"criteria": "status",
"value": "open",
"condition": "=="
},
{
"criteria": "condition2",
"value": "value2",
"condition": "=="
}
]
但是,当我们处理涉及 AND 或 OR 的复杂条件时,它会变得有点困惑。
问题:是否有一种标准化(甚至被广泛接受)的格式来表示 JSON 中的这种逻辑?如果由你决定,你会怎么做?
注意:第一个答案是可编辑的 wiki,因此任何人都可以对其进行改进。
最佳答案
如果您必须使用标准 JSON 实现这一点,我会推荐类似于 Lisp 的“S 表达式”的东西。条件可以是一个普通对象,也可以是一个数组,其第一个条目是连接它们的逻辑操作。
例如:
["AND",
{"var1" : "value1"},
["OR",
{ "var2" : "value2" },
{ "var3" : "value3" }
]
]
将表示 var1 == value1 AND (var2 == value2 OR var3 == value3)
。
如果您更喜欢简洁而不是一致性,您还可以允许一个对象具有多个属性,这些属性将通过 AND 隐式连接。例如, { "a": "b", "c": "d"}
将等价于 ["AND", { "a": "b"}, { "c": "d"}]
。但是在某些情况下(如示例),前一种语法不能忠实地表示所写的条件;您需要额外的技巧,例如翻译条件或使用虚拟属性名称。后一种语法应该始终有效。
https://stackoverflow.com/questions/20737045/