根据属性值要求值

时间:2017-02-16 13:42:05

标签: json schema jsonschema

我必须构建一个Json模式来格式化应用程序需要发送给另一个的每个消息。

我已经建立了这个:

sed 's/​/   /g' file_1 > file_2

目前,我想根据命令值要求一些属性,例如:

  • 如果命令设置为“read”,我想要求路径
  • 如果命令设置为“write”,我想要求路径,值和优先级

等...

我看到了一些关于此问题的主题,例如JSON Schema - specify field is required based on value of another field,但我无法通过草案v4来适应我的情况。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

找到出路:

{
    'description': '[...]',
    'definitions': {
        'readParameter' : {
            'type' : 'object',
             'required' : ['command','path'],
             'properties' : {
                'command' : {
                    'type' : 'string',
                    'enum' : ['read']
                },
                'path' : {
                    'type' : "string"
                }
             },
             "additionalProperties" : false
        },
        'writeParameter' : {
            'type' : 'object',
             'required' : ['command','path', 'value', 'priority'],
             'properties' : {
                'command' : {
                    'type' : 'string',
                    'enum' : ['write']
                },
                'path' : {
                    'type' : "string"
                },
                'value' : {
                    'type' : "string"
                },
                'priority' : {
                    'type' : 'integer', 
                    'maximum' : 255, 
                    'exclusiveMaximum' : false,
                    'minimum' : 0,
                    'exclusiveMinimum' : false
                }  
             },
             "additionalProperties" : false
        },

        'listParameter' : {
            'type' : 'object',
             'required' : ['command'],
             'properties' : {
                'command' : {
                    'type' : 'string',
                    'enum' : ['list']
                }
             },
             "additionalProperties" : false
        },


        'M2M_message_input' : {
            'type' : 'object',
            'oneOf': [
                    { "$ref": "#/definitions/readParameter" },
                    { "$ref": "#/definitions/writeParameter" },
                    { "$ref": "#/definitions/listParameter" }
            ],
        }
    }, 
    'type': 'object',
    '$ref' : '#/definitions/M2M_message_input'  
}