2016-11-03 1 views
0

msgId1a1이어야하며 msgId2a2이어야합니다.JSON 스키마 : 속성 이름 중 하나 또는 둘 중 하나와 다른 이름을 필요로하는 방법은 무엇입니까?

이 유효해야합니다 :이 너무

{ "msgId1": { "a1": "b1" } } 

:

{ "msgId2": { "a2": "b2" } } 

그리고이 : 무효의

{ "msgIdUnknownYet": { "a3": "b3" } } 

:

{ 
    "msgId1": { "a1": "b1" }, 
    "msgId2": { "a2": "b2" } 
} 
너무 무효로한다

: 나는 oneOf를 사용하는 경우

{ 
    "msgId1": { "abc": "b1" }, 
    "msgId2": { "a2": "b2" } 
} 

은, 그것은 알 수없는 메시지를 허용하지 않습니다. 또한 msgId 중 적어도 하나가 있으면 msgId1 또는 msgId2을 잘못 추가 할 수 있습니다. 어떻게 스키마를 작성 하는가?

답변

0

이 경우 dependencies을 사용할 수 있습니다.

{ 
    "type": "object", 
    "properties": { 
    "msgId1": { "required": ["a1"] }, 
    "msgId2": { "required": ["a2"] } 
    }, 
    "dependencies": { 
    "msgId1": { "not": { "required": ["msgId2"] } } 
    } 
} 

"msgId1"이 있으면 "msgId2"가 존재할 수 없다는 것을 효과적으로 나타냅니다. 이 방법은 "msgId1"또는 "msgId2"가없는 경우에도 계속됩니다.

+0

나는 20 개가 있습니다. 그런 다음 msgId1을 수행하지만 msg2/msg3/msg4 ..., msgId2는 수행하지 만 msg1/msg3/msg4를 수행하지 않습니까? – Velkan

0

분리하여 전체 속성 수를 제한하는 방법이있는 경우 작동합니다. 이 말은 : 그런 이름을 가진 속성이 있다면 그 특정 형식을 가져야하며 속성의 총 수는 1 이하 여야합니다.

{ 
    "$schema": "http://json-schema.org/draft-04/schema#", 
    "definitions": { 
    "header": { 
     "type": "object", 
     "properties": { 
      "id": { "type": "integer" } 
     }, 
     "required": ["id"] 
    }, 
    "messageHeader": { 
     "type": "object", 
     "properties": { 
      "token": { "type": "string" } 
     }, 
     "required": ["token"] 
    }, 
    "msgId1": { 
     "type": "object", 
     "properties": { "a1": { "type": "string" } }, 
     "required": ["a1"] 
    }, 
    "msgId2": { 
     "type": "object", 
     "properties": { "a2": { "type": "string" } }, 
     "required": ["a2"] 
    } 
    }, 

    "type": "object", 
    "dependencies": { 
    "msgId1": { "type": "object", "properties": { "msgId1": { "$ref": "#/definitions/msgId1" } } }, 
    "msgId2": { "type": "object", "properties": { "msgId2": { "$ref": "#/definitions/msgId2" } } } 
    }, 
    "maxProperties": 1 
}