json-schema-validator不验证数组的所有项,只验证第一个

时间:2016-06-27 09:11:56

标签: json schema

我有以下两种模式:

A.json

{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "type":"object",
    "properties":
    {
        "ArgumentChoice":{
            "type" : "array",
            "items" : {"$ref" : "B.json"}
        }
    }
}

B.json

{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "title" : "ArgumentChoiceType",
    "type":"object",
    "properties":{
        "ArgumentInt" : {
            "type" : "object",
            "properties":{
                "Value":{
                    "type" : "integer"
                }
            }
        },
        "ArgumentString" : {
            "type" : "object",
            "properties":{
                "Value":{
                    "type" : "string"
                }
            }
        }
    }
}

以下是针对A.json验证的json请求:

{
    "ArgumentChoice" : [
    {
        "ArgumentInt" : {
            "Value" : 1
        }
    },
    {
        "ArgumentString" :
        {
            "Name" : "JOB_NAME",
            "Value" : "test"
        }
    }
    ]
}

我的问题是,当我将ArgumentInt的值作为字符串传递时,它会失败,因为它接受整数值,我可以在报告消息中看到它。 但是,当我将ArgumentString的值作为整数传递时,它仍然会失败,但我在消息中看不到由于输入了错误的类型而导致失败。 我想只有ArgumentChoice中的第一个数组元素才会针对模式进行验证,因为如果ArgumentString位于ArgumentInt ArgumentString上且function addKeypress() { var lines = 16; elem.on('keypress', function(e) { var newLines = elem.val().split("\n").length; if(e.keyCode == 13 && newLines >= lines) { return false; } }); }); } 中的值类型错误,则会失败。 我做错了吗?

1 个答案:

答案 0 :(得分:1)

我创建了A.json和B.json的组合模式以在线测试。 我也能得到第二种情况的错误信息。

组合架构

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "ArgumentChoice": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "ArgumentInt": {
            "type": "object",
            "properties": {
              "Value": {
                "type": "integer"
              }
            }
          },
          "ArgumentString": {
            "type": "object",
            "properties": {
              "Value": {
                "type": "string"
              }
            }
          }
        }
      }
    }
  }
}

使用输入

{
    "ArgumentChoice" : [
    {
        "ArgumentInt" : {
            "Value" : "test"
        }
    },
    {
        "ArgumentString" :
        {
            "Name" : "JOB_NAME",
            "Value" : 1
        }
    }
    ]
}

enter image description here 如果您有更多问题,请与我们联系。