对象数组的JSON模式定义

时间:2016-04-21 01:21:56

标签: json jsonschema json-schema-validator

我见过这个other question但是它并不完全相同,我觉得我的问题比较简单,但是没有用。

我的数据如下所示:

[
    { "loc": "a value 1", "toll" : null, "message" : "message is sometimes null"},
    { "loc": "a value 2", "toll" : "toll is sometimes null", "message" : null}
]

我想在Node.js项目中使用AJV进行JSON验证,我尝试了几个模式来尝试描述我的数据,但我总是将其作为错误:

[ { keyword: 'type',
    dataPath: '',
    schemaPath: '#/type',
    params: { type: 'array' },
    message: 'should be array' } ]

我尝试的架构看起来像这样:

{
  "type": "array",
  "items": {
    "type": "object",
    "properties": {
      "loc": {
        "type": "string"
      },
      "toll": {
        "type": "string"
      },
      "message": {
        "type": "string"
      }
    },
    "required": [
      "loc"
    ]
  }
}

我还尝试使用this online tool生成架构,但这也不起作用,并且为了验证应该输出正确的结果,我尝试针对jsonschemavalidator.net验证该输出,但这也给了我一个类似的错误:

Found 1 error(s)
 Message:
 Invalid type. Expected Array but got Object.
 Schema path:
 #/type

1 个答案:

答案 0 :(得分:37)

您已正确定义了架构,但它与您要验证的数据不匹配。如果更改属性名称以匹配架构,则仍然存在一个问题。如果要允许“toll”和“message”为空,则可以执行以下操作。

{
  "type": "array",
  "items": {
    "type": "object",
    "properties": {
      "loc": {
        "type": "string"
      },
      "toll": {
        "type": ["string", "null"]
      },
      "message": {
        "type": ["string", "null"]
      }
    },
    "required": [
      "loc"
    ]
  }
}

但是,这与您收到的错误消息无关。该消息表示您正在验证的数据不是数组。您发布的示例数据不应导致此错误。您是否在问题中发布的数据以外的某些数据上运行验证器?