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

问题描述 投票:2回答:1

假设我有一个简单的联系人数据库,其中包含“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)和值限制(例如ids是10000和99999之间的数字)是直截了当的。但是,我想实施更复杂的检查,例如:

  • 每个contacts对象都有一个独特的id
  • 每个history对象的id值与contact的“id”值匹配

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

json validation jsonschema
1个回答
2
投票

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

您可能已经想到了这一点,选项是循环访问对象键并手动验证它。例如,您可以将ids添加到Set中,并比较设置大小和数组长度。

© www.soinside.com 2019 - 2024. All rights reserved.