json模式验证程序如何获取额外字段

ffx8fchx  于 2021-07-12  发布在  Java
关注(0)|答案(2)|浏览(480)

我这样定义一个json shema

{
  "type": "object",
  "properties": {
    "firstName": {
      "type": "string",
    },
    "lastName": {
      "type": "string",
    },
    "age": {
      "type": "integer"
    }
  }
}

这是我的json

{
  "firstName": "John",
  "lastName": "Doe",
  "age": 21,
  "abcd": "how to get this field",
  "efg": "and this field"
}

我想得到json模式中没有定义的额外字段,就像“d”和“efg”。
输出如下:[“d”,“efg”]

r7s23pms

r7s23pms1#

如果要添加随机属性(如d)而不是泛型属性(firstname、lastname、age),最好在json模式中有一个map对象,可以在其中填充任何键、值对(如d-“如何获取此字段”)。

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "firstName": {
      "type": "string"
    },
    "lastName": {
      "type": "string"
    },
    "age": {
      "type": "integer"
    },
    "attributes": {"$ref": "#/definitions/StringMap"}
  },
  "required": [
    "firstName",
    "lastName",
    "age"
  ],
  "definitions": {
    "StringMap": {
      "type": "object",
      "additionalProperties": {"type": "string"}
    }
  }
}
iovurdzv

iovurdzv2#

我想您是在问,如果用户添加了额外的属性,如何更改json模式以拒绝输入。在这种情况下,可以将additionalproperties设置为false。

{
  "type": "object",
  "properties": {
    "firstName": {
      "type": "string",
    },
    "lastName": {
      "type": "string",
    },
    "age": {
      "type": "integer"
    }
  },
  "additionalProperties": false
}

我对你在github上的原始问题感到困惑。https://github.com/networknt/json-schema-validator/issues/322

相关问题