假设我有一个简单的联系人数据库,其中包含“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
s是10000和99999之间的数字)是直截了当的。但是,我想实施更复杂的检查,例如:
contacts
对象都有一个独特的id
值history
对象的id
值与contact
的“id”值匹配可以使用JSON schema指定这些约束吗? (注意,解决方案不应该依赖于两个id
字段在结构中彼此相对接近;在完整的应用程序中,它们可能各自在单独的值树中有几个级别。)
AFAIK,您无法使用JSON Schema执行此操作。您可以检查数组中的唯一项,但不检查对象值。
您可能已经想到了这一点,选项是循环访问对象键并手动验证它。例如,您可以将id
s添加到Set中,并比较设置大小和数组长度。