ruby的json模式验证器 - 处理必需,可选和未定义的字段

时间:2016-01-20 15:57:03

标签: ruby-on-rails ruby json validation schema

我在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",我不喜欢。我只想在发现原始模式中没有提到任何未定义的密钥时抱怨。

1 个答案:

答案 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