2013-11-21 13 views
5

ruby​​ gem json-schemaを使用してjsonデータを検証しようとしています。JSONスキーマでの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": "[email protected]", 
"username": "johndoe" 
} 

とJSONを:: Validator.validateは、入力としてこのデータを使用して、trueを返します。

スキーマでユーザー名が指定されていないため、falseにしないでください。

答えて

6

あなたは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 
+0

注意をすべての追加プロパティが禁止されているため、後でフォーマットしてください。 – cloudfeet

+1

@cloudfeetこの場合、スキーマも拡張します。 –

+1

私は元のクラスを変更することなく拡張することを意味しました。あなたのフォーマットを拡張している第三者、またはあなたの会社の誰かが書いた書式を拡張して、気難しく反抗的です。 – cloudfeet

関連する問題