【问题标题】:JSON data validation under JSON-schemaJSON-schema 下的 JSON 数据验证
【发布时间】:2013-11-21 18:33:52
【问题描述】:

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

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

【问题讨论】:

    标签: ruby json jsonschema


    【解决方案1】:

    您需要在 JSON Schema 中定义 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
    

    【讨论】:

    • 请注意,这会限制您以后扩展格式的能力,因为所有额外的属性都被禁止。
    • @cloudfeet 在这种情况下,您也可以扩展架构。
    • 我的意思是在不修改原始类的情况下进行扩展 - 例如某些第三方扩展了您的格式,或者您扩展了您公司中脾气暴躁且顽固的其他人编写的格式。
    猜你喜欢
    • 1970-01-01
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-18
    • 2016-07-09
    • 2015-10-24
    • 2019-10-18
    相关资源
    最近更新 更多