JSON 模式可以指定跨域约束吗?

Can JSON schemas specify cross-field constraints?

假设我有一个简单的联系人数据库,其中包含 "Last Called" 历史记录,以 JSON 格式存储:

{
  "contacts": [
    {"id": 10001, "name": "Fred"},
    {"id": 10006, "name": "Helen"},
    {"id": 10009, "name": "John"},
    {"id": 10030, "name": "Tara"},
    {"id": 10101, "name": "Jason"}
  ],
  "history": [
    {"id": 10006, "time": 1513567986},
    {"id": 10001, "time": 1513567243},
    {"id": 10101, "time": 1513566511},
    {"id": 10030, "time": 1513565012},
    {"id": 10006, "time": 1513562390}
  ]
}

我想彻底验证一下。指定整体结构(例如确保每个 contact 都有一个数字 id 和一个字符串 name)和值限制(例如 id 是 10000 和 99999 之间的数字) 很简单。但是,我想实施更复杂的检查,例如:

可以使用 JSON schema 指定这些约束吗? (请注意,解决方案不应该依赖于结构中彼此相对接近的两个 id 字段;在一个完整的应用程序中,它们可能各自在不同的值树中有几层深。)

AFAIK,您不能使用 JSON 架构执行此操作。您可以检查数组中的唯一项,但不能检查对象值。

您可能已经想到了这一点,选择是遍历对象键并手动验证它。例如,您可以将 id 添加到一个集合中,然后比较集合大小和数组长度。