json - 如何在 JSON 中使用 AND、OR 稳健地描述条件表达式?

标签 json expression logical-operators comparison-operators

说我有一个表达:

( 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/

    相关文章:

    java - 如何在 Java 中的 Json 序列化期间避免无限循环

    mysql - MySQL 中的 JSON,返回 1(共 3 个)部门,列出所有员工

    python - 正则表达式格式化没有空格的url

    javascript - Angular 表达式从对象数组中的相等属性获取对象的属性

    Postgresql NOT NULL AND <> '' 与 NOT NULL OR <> ''

    java - 我试图通过更改操作数 `|` 和 `&` 的位置来打印所有可能的组合。我怎样才能实现这个目标?

    if-statement - 为什么一个变量与多个值的不相等检查总是返回 true?

    java - 如何用gson解析相对复杂的url

    json - 如何使用aerospike查询语言导入json数据?

    c++ - 留着 mustache 的表情是什么: “<:]{%>”?