JSON模式下的JSON数据验证

时间:2013-11-21 18:33:53

标签: ruby json jsonschema

我正在尝试使用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。

不应该是假的,因为没有在架构上指定用户名吗?

1 个答案:

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