繁体   English   中英

“additionalProperties”可以应用于 JSON Schema 中的嵌套对象吗?

[英]Can “additionalProperties” apply to nested objects in JSON Schema?

我正在开发一个接受以下 JSON 的应用程序:

{
  "gd": { "enabled": true, "show_counts": true },
  "ra": { "enabled": true }
}

我开发了一个 JSON 模式来验证这个输入,允许一些键是可选的,其他键是必需的,以及一些最少数量的属性。 它运作良好,看起来像这样:

{
  "$schema": "http://json-schema.org/draft-07/schema",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "gd": {
      "type": "object",
      "required": [ "enabled" ],
      "additionalProperties": false,
      "properties": {
        "enabled": { "type": "boolean" },
        "show_counts": { "type": "boolean" }
      }
    },
    "ra": {
      "type": "object",
      "required": [ "enabled" ],
      "additionalProperties": false,
      "properties": {
        "enabled": { "type": "boolean" }
      }
    }
  },
  "minProperties": 1
}

让我烦恼的一件事是每个 object 都冗余地指定了"additionalProperties": false 我想在顶层指定一次,JSON 文档中的任何地方都不应允许架构中未指定的任何属性。

那可能吗?

在最新的草案 (2019-09) 中,您可以通过定义所有模式派生自的“基本模式”来做到这一点:

{
  $defs: {
    base_object: {
      unevaluatedProperties: false
    },
  },
  $ref: '#/$defs/base_object',
  type: 'object',
  // additionalProperties: false does not need to be stated here
  ...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM