【问题标题】:json schema validator how to get extra fieldjson模式验证器如何获取额外的字段
【发布时间】:2020-08-20 03:28:38
【问题描述】:

我这样定义一个 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 模式中定义的额外字段,就像“abcd”和“efg”一样。
输出如下:["abcd","efg"]

【问题讨论】:

  • 我不明白你的问题。
  • 我又修改了一遍,你能再看看吗?
  • 您是否在问如何忽略 JSON 架构并检索该“额外”字段?答案取决于您使用的 JSON 库,因此我们无法回答。 --- 或者您是在问如何定义允许“额外”字段的 JSON 模式?
  • 我用json schema,json通过了。另外,json模式中没有定义字段“abcd”和“efg”,所以有没有任何方法或JSON库来获取文件。输出类似于 ["abcd","efg"]
  • 我想我明白了。您在问如何获取未在架构中的属性中定义的属性,对吗?您必须为此编写自己的解决方案。对于单层对象,这很容易,但对于许多嵌套的层级,这是一个非常困难的问题。

标签: java jsonschema json-schema-validator


【解决方案1】:

如果你想添加一个随机属性(如 abcd)而不是通用属性(firstName、lastname、age),最好在 JSON 模式中有一个 map 对象,你可以在其中填写任何键、值对(如 abcd -“如何获取此字段”)。

 {
  "$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"}
    }
  }
}

【讨论】:

  • Emmmm,,,,谢谢。但是 json 数据是用户发送的,我不知道他们发送什么。例如,他们发送了一个包含“abcd”和“efg”的数据,这在 json 模式中没有定义,我需要获取“abcd”和“efg”字段,所以我可以告诉他们修复它。
  • 是的,在这种情况下,您必须要求更改 JSON 字段并获取与您的 JSON 模式一致的值。如果它回答了您的问题,请接受我的回答。
【解决方案2】:

我想您是在问如果用户添加了额外的属性,如何更改 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

【讨论】:

    猜你喜欢
    • 2015-06-12
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    • 2019-03-17
    • 2016-10-05
    • 1970-01-01
    • 2015-06-22
    • 2018-12-17
    相关资源
    最近更新 更多