我正在尝试使用ruby gem json-schema验证一些json数据。
我有以下架构:
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "User",
"description": "A User",
"type": "object",
"properties": {
"name": {
"description": "The user name",
"type": "string"
},
"e-mail": {
"description": "The user e-mail",
"type": "string"
}
},
"required": ["name", "e-mail"]
}
以及以下json数据:
{
"name": "John Doe",
"e-mail": "john@doe.com",
"username": "johndoe"
}
使用此数据作为输入的JSON :: Validator.validate返回true。
不应该是假的,因为没有在架构上指定用户名吗?
答案 0 :(得分:6)
您需要在JSON模式中定义additionalProperties
并将其设置为false
:
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "User",
"description": "A User",
"type": "object",
"properties": {
"name": {
"description": "The user name",
"type": "string"
},
"e-mail": {
"description": "The user e-mail",
"type": "string"
}
},
"required": ["name", "e-mail"],
"additionalProperties": false
}
现在验证应按预期返回false
:
require 'json'
require 'json-schema'
schema = JSON.load('...')
data = JSON.load('...')
JSON::Validator.validate(schema, data)
# => false