问题描述
我想用 json-schema 验证一个 json 对象,但该 json 对象可以根据用户的需要多次复制其值。
在用户创建他的 json 时,该对象的键可以重复多次。
示例 1:(带对象的集合)
module ModuleName
module Workers
class WorkerClass
include Sidekiq::Worker
sidekiq_options queue: 'default',retry: true
def perform # here with none,1 or more params
# update some model
end
end
end
end
示例 1 的 JSON-SCHEMA
{
"info":
[
{
"name": "aaron","email": "aaron.com"
}
]
}
示例 2:(带有 2 个对象的集合)
{
"$schema": "http://json-schema.org/draft-04/schema#","type": "object","properties": {
"name": {
"type": "string"
},"email": {
"type": "string"
}
},"required": [
"name","email"
]
}
示例 2 的 JSON SCHEMA
{
"info":
[
{
"name": "aaron","email": "aaron.com"
},{
"name": "misa","email": "misa.com"
}
]
}
简而言之,我要找的是一个动态的 json 模式,无论集合增长多少次,它都只能使用 1 个,而不能生成多个。
解决方法
当您使用draft-04 时,我将引用draft-04 规范。
这意味着您希望 items
具有对象值而不是对象数组。
“items”的值必须是一个对象或一个数组。如果是
一个对象,这个对象必须是一个有效的 JSON 模式。如果是
数组,该数组的项必须是对象,并且这些对象中的每一个
必须是有效的 JSON 架构。
Draft-04 规范 https://datatracker.ietf.org/doc/html/draft-fge-json-schema-validation-00#section-5.3.1
在 JSON Schema 2020-12 中,items
只能是一个对象值,并且您必须对元组使用不同的关键字,如验证。