说我有一个表达:
( A >= 10 && B == 20 ) || ( C < 30 ) || ( D != 50 )
我可以建议使用以下 JSON 来存储/表示此表达式:
{ "filter":
[
{ "var":"A", "condition":"ge", "num":10 },
{ "var":"B", "condition":"e", "num":20 }
],
[
{ "var":"C", "condition":"lt", "num":30 }
],
[
{ "var":"D", "condition":"ne", "num":50 }
]
}
其中“过滤器”映射到一个子数组数组。每个子数组中的所有元素都与 AND 相关联,而所有子数组都与 OR 相关联。
在编写这样的 JSON 时,我忽略了什么吗?
最佳答案
你在这里做了几个假设:
这些假设对于您的特定用例可能是正确的,但更面向 future 的方法是将比较与带参数的函数类似地对待:
{ "ge": ["A", 10] }
此外,虽然您使用一组对象来表示 AND 和一组数组来表示 OR 的想法很聪明,但对于负责编写代码来解析它的人来说,这可能不是很明显。重用对象的想法,其中键代表一个函数及其关联的值,参数更具表现力:
{ "all": [<condition 1>, <condition 2>, ...] }
把这两个想法放在一起,我们得到了这样的东西:
{ "any": [
{ "all": [
{ "ge": ["A", 10] },
{ "eq": ["B", 20] }
]},
{ "lt": ["C", 30] },
{ "ne": ["D", 50] }
]}
关于json - 如何在 JSON 中使用 AND、OR 稳健地描述条件表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29329844/