JSON 스키마에 선언 된 속성 만 허용


83

json-schema를 사용하고 있으며이 파일에 선언 된 속성 만 유효성 검사를 통과하도록 허용하고 싶습니다. 예를 들어 사용자가 json 객체에 "name"속성을 전달하면 여기에 "name"이 속성으로 나열되지 않기 때문에이 스키마는 실패합니다.

나열된 속성 만 통과하도록 허용하는 "필수"와 유사한 기능이 있습니까?

{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "Accounting Resource - Add Item",
"type": "object",
"properties": {
    "itemNumber": {
        "type":"string",
        "minimum": 3
    },
    "title": {
        "type":"string",
        "minimum": 5
    },
    "description": {
        "type":"string",
        "minimum": 5
    }
},
"required": [
    "itemNumber",
    "title",
    "description"
]
}

2
방법이 있어도 미래의 확장 성을 발에 쏘는 것처럼 보인다.
크리스 피트 맨

9
나중에이 스키마에 해당 속성을 추가 할 것입니다.
ipengineer

1
@ipengineer- 당신 이 확장을 하는 한 작동합니다 (-ish) . 또한 일부 사람들이 정적 인 것으로 간주 할 수있는 리소스를 변경하는 것을 의미합니다.
cloudfeet 2013-10-24

11
그것에 대해 "-ish"가 없습니다. 팀 규모에 관계없이 향후 API가 새 소품을 받아들이 기 시작하면 스키마에 새 속성을 추가하는 것이 어렵지 않습니다. 그렇다면 아마도 다른 일을 잘못하고있을 것입니다.
AJB

답변:



6

참고로 표준 v5는 "알 수없는 속성 금지" 유효성 검사 모드를 설명하는 것 같습니다 .

따라서이 요구 사항을 형식의 일부로 만드는 대신 (Chris Pitman이 의견에서 말했듯이 향후 확장 성을 손상시킵니다), 유효성 검사기 에게 알 수없는 속성을 오류로 플래그 하도록 지시 할 수 있습니다. 따라서 dev에 유용한 매우 엄격한 유효성 검사 모드와 같습니다.

일부 검증 인은 이미이를 지원합니다 (예 : tv4 ) :

var result = tv4.validateMultiple(data, schema, checkRecursive, banUnknownProperties);

이 도구를 checkRecursive사용하면 데이터에 순환 참조가있을 수 있고를 사용하지 않고도 원하는 banUnknownProperties작업을 정확하게 수행 할 있는 경우을 사용해야 "additionalProperties":false합니다.


3

정의 내에서 다음을 제공합니다.

  • 내부의 모든 필수 필드 "required": []
  • 및 설정 "additionalProperties": false

데모:

없이 "additionalProperties": false: 여기에 이미지 설명 입력

와 함께 "additionalProperties": false: 여기에 이미지 설명 입력

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.