【问题标题】:jsonschema-master to validate json request not responding as expectedjsonschema-master 验证 json 请求未按预期响应
【发布时间】:2018-01-10 09:40:53
【问题描述】:

我正在尝试使用 jsonschema-master 来验证通过使用 express 的 POST 请求输入的 json 请求。请参阅下面的代码和示例。

如果属性标签丢失或拼写错误,例如“model”、“areas”、“id”,它会拾取,但如果这些属性的值符合规范,则不会拾取。例如,“model”属性被定义为“premium”或“basic”的枚举类型,但我似乎可以将任何旧字符串放在那里,无论如何它都会继续工作,坐标也被定义为类型编号,但它再次忽略了这一点,然后错误通过验证器并导致进一步的问题。不知道我错过了什么。

node.js 代码:

var Validator = require('jsonschema-master').Validator;
var v = new Validator();
var bodySchema = {
      "model": { 
        "enum": [ "premium","basic" ] 
      },
      "areas": {
        "type":"array",
        "items": {
          "id": {"type": "string"},
          "geometry": {
            "type": { "type":"string"},
            "coordinates": {
               "type":"array",
               "items": {
                 "type":"array",
                 "items": [
                   {"type":"number"},
                   {"type":"number"},
                   {"type":"number"}
                 ]
               }
            },
            "required" : ["type","coordinates"]
          },
          "required" : ["id","geometry"]
        }
      },
      "required" : ["model","areas"]
};
var valResult = v.validate(doc.request, bodySchema);
if (valResult.errors.length) {
  // Validation failed.
  // All processing will now stop.
  console.log('Request invalid: '+ doc._id +" - "+valResult.errors);
}

示例正确的 JSON 请求(在 doc.request 中)

{
  "model": "premium",
  "areas": [
    {
      "id": "1234",
      "geometry": {
        "type": "Polygon",
        "coordinates": [
          [
            [
              453600.0,
              181100.0,
              0
            ],
            [
              453600.0,
              181200.0,
              0
            ],
            [
              453700.0,
              181200.0,
              0
            ],
            [
              453700.0,
              181100.0,
              0
            ],
            [
              453600.0,
              181100.0,
              0
            ]
          ]
        ]
      }
    }
  ]
}

【问题讨论】:

    标签: javascript json node.js express jsonschema


    【解决方案1】:

    谢谢大家,但我最终解决了。以下是架构的更正语法:

    var bodySchema = {
        "type" : "object",
        "properties": {
            "model": { 
                "enum": [ "premium","basic" ] 
            },
            "areas": {
                "type":"array",
                "items": {
                    "type" : "object",
                    "properties": {
                        "id": {"type": "string"},
                        "geometry": {
                            "type" : "object",
                            "properties": {
                                "type": { "type":"string"},
                                "coordinates": {
                                    "type":"array",
                                    "items": {
                                        "type":"array",
                                        "items": {
                                            "type":"array",
                                            "items": [
                                                {"type":"number"},
                                                {"type":"number"},
                                                {"type":"number"}
                                            ]
                                        }
                                    }
                                }
                            },
                            "required" : ["type","coordinates"]
                        }
                    },
                    "required" : ["id","geometry"]
                }
            }
        },
        "required" : ["model","areas"]
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-29
      • 2021-12-07
      • 1970-01-01
      • 1970-01-01
      • 2016-08-14
      • 1970-01-01
      相关资源
      最近更新 更多