我正在尝试为现有的JSON文件创建一个JSON模式,如下所示:
{
"variable": {
"name": "age",
"type": "integer"
}
}
在架构中,我想确保type
属性的值为string
或integer
:
{
"variable": {
"name": "string",
"type": {
"type": "string",
"enum": ["string", "integer"]
}
}
}
不幸的是,它会消息:ValidationError {is not any of [subschema 0]...
。
我已经读到有#34;没有保留字"在JSON模式中,所以我假设一种类型是有效的,假设我正确地声明了它?
答案 0 :(得分:1)
根据the specification,在Valid types
的{{1}}部分:
此关键字的值必须是字符串或数组。如果它是一个数组,那么数组的元素必须是字符串,并且必须是唯一的。 字符串值必须是核心规范定义的七种基本类型之一。
稍后,在type
:
如果实例的原始类型是关键字定义的类型之一,则实例匹配成功。回想一下:“数字”包括“整数”。
在你的情况下:
Conditions for successful validation
答案 1 :(得分:0)
jruizaranguren 接受的答案实际上并没有回答这个问题。
问题在于,给定具有名为“type”的字段的 JSON(不是 JSON 模式,JSON 数据),很难编写不会阻塞的 JSON 模式。
假设您有一个现有的 JSON 数据提要(数据,而不是架构),其中包含:
"ids": [ { "type": "SSN", "value": "123-45-6789" },
{ "type": "pay", "value": "8675309" } ]
我在尝试解决同样的问题时发现的是,而不是把
"properties": {
"type": { <======= validation chokes on this
"type": "string"
}
你可以放
"patternProperties": {
"^type$": {
"type": "string"
}
但我仍在研究如何将其标记为必填字段。这可能是不可能的。
我认为,基于查看原始问题中的“模式”,JSON 模式从那时起已经发展了很多 - 但这仍然是一个问题。可能有更好的解决方案。