2013-11-21 2 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

당신은 false에 당신의 JSON 스키마에 additionalProperties을 정의하고 설정해야합니다

{ 
    "$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

원래 클래스를 수정하지 않고 확장하는 것을 의미했습니다. 일부 제 3 자의 형식을 확장하거나 회사에서 심술 궂고 당황한 다른 사람이 작성한 형식을 확장 할 수 있습니다. – cloudfeet