json - 将逻辑表示为 JSON 中的数据

出于业务原因,我们需要将一些条件逻辑外部化到外部文件中:最好是 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/

相关文章:

json - 从 HttpServletRequest 检索 JSON 对象文字

database - Fabric.js - 如何使用自定义属性在服务器上保存 Canvas

json - 将 JSON 序列化为查询字符串的标准化方法?

java - JSON - 遍历 JSONArray

c# - asp.net asmx Web 服务返回 xml 而不是 json

c# - 为什么 DateTime.MinValue 不能在 UTC 之前的时区中序列化?

c# - 复杂类型在 ApiController 参数中为空

javascript - JSON 中空与空的约定是什么?

java - Gson 是否必须使用默认的无参数构造函数?

java - 在不知道 JSON 格式的情况下用 Java 解析 JSON