Ruby JSON模式验证器未返回预期结果

时间:2017-10-11 16:10:44

标签: json ruby validation jsonschema

我正在使用JSON模式验证器gem来验证响应是否带有预期的键和值类型。我的数据应该以下面的JSON格式返回:

{
    "hierarchies": [
        {
            "hierarchyId": "123ABC456DEF789",
            "depth": 1,
            "hierarchyNodes": [
                {
                    "nodeId": "ANID123456FORNODE789",
                    "id": "12345678"
                }
            ]
        }
    ]
}
  • "层次结构"可以是0..N元素的数组
  • " hierarchyNodes"也可以是0..N元素的数组

我当前的架构如下(我当前缺少节点阵列):

schema = {
  '$schema' => 'http://json-schema.org/draft-04/schema#',
  type: 'object',
  properties: {
    hierarchies: {
      type: 'array',
      properties: {
        object_items: {
          type: 'object',
          properties: {
            hierarchyId: { type: 'string' },
            depth: { type: 'integer' }
          },
          required: [:hierarchyId, :depth],
          additionalProperties: false
        }
      },
      required: [:object_items]
    }
  },
  required: [:hierarchies]
}

出于某种原因,当所有这些的预期结果都为false时,以下内容返回true:

  

0> JSON :: Validator.validate(schema,{hierarchyies:[{}]})   =>真

     

0> JSON :: Validator.validate(schema,{hierarchyies:[{hierarchyId:' hi',depth:1,something:' hey'}]})   =>真

     

0> JSON :: Validator.validate(schema,{x:[{a:' something'}]})   =>真

预期的True结果将具有以下架构,并且只有此架构:

  

JSON :: Validator.validate(schema,{hierarchyies:[{hierarchyId:' id',   深度:1}]})

有人可以让我知道我在设置验证架构方面出了什么问题吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

使用@tadman提供的建议,我找到了这个解决方案:

schema = {
  '$schema': 'http://json-schema.org/draft-06/schema#',
  'properties': {
    'hierarchies': {
      'additionalItems': false,
      'items': {
        'additionalItems': false,
        'properties': {
          'depth': { 'type': 'integer' },
          'hierarchyId': { 'type': 'string' },
          'hierarchyNodes': {
            'additionalItems': false,
            'items': {
              'additionalItems': false,
              'properties': {
                'id': { 'type': 'string' },
                'nodeId': { 'type': 'string' }
              },
              'required': ['nodeId', 'id'],
              'type': 'object'
            },
            'type': 'array'
          }
        },
        'required': ['hierarchyId', 'depth', 'hierarchyNodes'],
        'type': 'object'
      },
      'type': 'array'
    }
  },
  'required': ['hierarchies'],
  'type': 'object'
}