我在ruby中使用json-schema进行此检查。
schema = {
"type" => "object",
"properties" => {
"id" => {"type": "string"},
"experience" => {"type": "array"},
"education" => {"type": "string"}
},
"required" => ["id", "education"]
}
JSON::Validator.validate!(schema, {"id" => 1, "education" => "MIT", "new_field":"dummy"})
我希望验证失败,因为有一个" new_field"未在架构中定义。然而,它并没有失败,因为验证似乎很高兴所需的字段存在。
JSON::Validator.validate!(schema, {"id" => 1, "education" => "MIT", "new_field":"dummy"},:strict => true)
如果我使用严格的选项,它会抱怨"经验"以及" new_field",我不喜欢。我只想在发现原始模式中没有提到任何未定义的密钥时抱怨。
答案 0 :(得分:2)
我希望验证失败,因为有一个" new_field"这未在架构中定义。
因此,当模式外存在其他属性时,您希望验证失败。
将"additionalProperties" => false
添加到您的架构中以实现此目的。并且不要使用strict
选项。
详情。让架构为:
schema = {
"type" => "object",
"properties" => {
"id" => {"type": "string"},
"experience" => {"type": "array"},
"education" => {"type": "string"}
},
"required" => ["id", "education"],
"additionalProperties" => false
}
这个验证会失败:
JSON::Validator.validate!(schema, {"id" => '1', "education" => "MIT", "new_field":"dummy"})
但是这不是:
JSON::Validator.validate!(schema, {"id" => '1', "education" => "MIT"})
请注意,我将id
调整为String
而不是FixNum
。