使用 json-schema 要求或禁止基于另一个属性值的属性?

2023-12-13

我想在 json-schema 中完成什么:当属性enabled is true,还需要某些其他属性。什么时候false,这些属性应该被禁止。

这是我的 json 架构:

{
  "type": "object",
  "properties": {
    "enabled": { "type": "boolean" }
  },
  "required" : ["enabled"],
  "additionalProperties" : false,
  "if": {
    "properties": {
      "enabled": true
    }
  },
  "then": { 
    "properties": {
      "description" : { "type" : "string" },
      "count": { "type": "number" }
    },
    "required" : ["description", "count"]
  }
}

验证使用ajv版本 6.5,这导致了要求count等,无论其值如何enabled。例如,对于数据:

{ "enabled": false }

我的验证错误是:

[ { keyword: 'required',
    dataPath: '',
    schemaPath: '#/then/required',
    params: { missingProperty: 'description' },
    message: 'should have required property \'description\'' },
  { keyword: 'required',
    dataPath: '',
    schemaPath: '#/then/required',
    params: { missingProperty: 'count' },
    message: 'should have required property \'count\'' },
  { keyword: 'if',
    dataPath: '',
    schemaPath: '#/if',
    params: { failingKeyword: 'then' },
    message: 'should match "then" schema' } ]

我怎样才能使用 json-schema 来完成这个任务draft-7?

请注意,此问题与以下问题类似,但要求更严格:
有条件地需要 jsonSchema 属性.


尝试这个架构:

{
  "type": "object",
  "properties": {
    "enabled": {
      "type": "boolean"
    }
  },
  "required": [
    "enabled"
  ],
  "if": {
    "properties": {
      "enabled": {
        "const": true
      }
    }
  },
  "then": {
    "properties": {
      "enabled": {
        "type": "boolean"
      },
      "description": {
        "type": "string"
      },
      "count": {
        "type": "number"
      },
      "additionalProperties": false
    },
    "required": [
      "description",
      "count"
    ]
  },
  "else": {
    "properties": {
      "enabled": {
        "type": "boolean"
      }
    },
    "additionalProperties": false
  }
}

如果你需要"additionalProperties": false你必须枚举两个中的所有属性then and else。如果您可以接受其他属性,架构可能会更简单:

{
  "type": "object",
  "properties": {
    "enabled": {
      "type": "boolean"
    }
  },
  "required": [
    "enabled"
  ],
  "if": {
    "properties": {
      "enabled": {
        "const": true
      }
    }
  },
  "then": {
    "properties": {
      "description": {
        "type": "string"
      },
      "count": {
        "type": "number"
      }
    },
    "required": [
      "description",
      "count"
    ]
  }
}

我检查过ajv cli.

Valid: {"enabled": false}

无效的:{"enabled": true}

Valid: {"enabled": true, "description":"hi", "count":1}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 json-schema 要求或禁止基于另一个属性值的属性? 的相关文章

  • 根据外部架构文件验证 Jackson 的 JSON 架构合规性

    我想使用杰克逊图书馆 https github com FasterXML jackson 来处理 Java 中的 JSON 文件 这些文件由 JSON 模式文件描述 现在 我想验证解析的 JSON 是否符合由其自身解析的 JSON 模式文
  • JsonSchema:根据另一个属性的值验证类型

    我正在使用以下架构来验证我的 json schema http json schema org schema title Rules description Describes a set of rules type object prop
  • Jackson:生成带有引用的模式

    当使用 Jackson 的 JSON 模式模块时 我不想在遇到模型类时停止序列化完整的图表 而是使用类名插入另一个模式的 ref 您能引导我到 jackson module jsonSchema 源代码中的正确位置来开始修补吗 下面是一些代
  • 有没有办法只使用 Swagger 进行验证而不使用整个框架?

    假设我有一个实现 JSON HTTP API 的现有 Java 服务 并且我想添加 Swagger 架构并自动验证请求和响应 而无需重新调整服务以使用 Swagger 框架 代码生成 是否有任何东西提供 Java API 我可以将其绑定并传
  • 定义 JSON 结构是否需要 JSON 模式?

    我问这个问题是因为我看到当前的 JSON 模式草案 http json schema org 建议采用以下方式拥有 JSON 架构 对于 JSON a abc b 123 草案中提出的模式是这样的 type object propertie
  • 是否可以从另一个 AJV 定义中引用枚举中的属性名称?

    我正在寻找是否可以参考属性名称为enumAJV 定义中的值 这是一个例子 id modes json description Example modes type object properties MODE WALK ref walk j
  • 从 JSON 模式生成 C# 类 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我正在创建一个 C WCF Web 服务 它以 JSON 格式返回大量数据 客户端是一个iPad应用程序 目前正在由另一个团队开发 所以我正在研究规
  • 使用 Apache Kafka Streaming 解析 JSON 数据

    我有一个从 Kafka 主题读取 JSON 数据的场景 通过使用 Kafka 0 11 版本 我需要编写 Java 代码来流式传输 Kafka 主题中存在的 JSON 数据 我的输入是包含字典数组的 Json 数据 现在我的要求是获取 文本
  • 从 pojo 生成 JsonSchema:如何自动添加“描述”?

    我正在尝试从项目中的 pojos 自动生成 JsonSchema 代码如下所示 ObjectMapper mapper new ObjectMapper SchemaFactoryWrapper visitor new SchemaFact
  • Spring Data Rest - 自定义 Json 架构/阿尔卑斯山?

    我的需要是向将使用 API 的客户端应用程序提供有关数据约束或默认值的信息 生成的模式或 ALPSSpring Data Rest似乎是放置此信息的好地方 但是官方参考文档中关于记录 API 的部分有点快 而且我在社区中找不到完整记录的示例
  • 如何根据字段描述的对象类型根据 JSON 模式验证 JSON 对象?

    我有许多对象 消息 需要根据 JSON 模式 draft 04 进行验证 每个对象都保证有一个 type 字段 用于描述其类型 但每种类型都有一组完全不同的其他字段 因此每种类型的对象都需要一个唯一的模式 我看到了几种可能性 但没有一种特别
  • 如何为对象数组编写 JSON 模式?

    我的 JSON 字符串的格式如下 count 3 data a ax 1 b bx 2 c cx 4 The data数组包含很多a and b and c 并且没有其他种类的物体 If count 0 data应该是一个空数组 我在用着h
  • 元模式指定所有属性所需的属性

    我想自定义一个元模式 使得所有属性都需要有一个附加属性 例如 我如何要求所有属性都指定一个 type 那么这个模式应该会失败 schema http json schema org schema title description type
  • 如何验证 REST 服务内传入的 JSON 数据?

    Rest 服务需要根据 json 模式验证所有传入的 json 数据 json 模式是公共可访问的 并且可以通过 http 请求检索 我正在使用 jackson framework 在 java 和 json 之间进行编组和解组 到目前为止
  • 如何在 JSON Schema 中制作二维数组?

    下面的二维数组怎么写JSON 架构 http json schema org 网格固定为16 13 它包含完全空的行或具有 int 0 99 或空字符串等值的行 这是数组的示例 94 78 37 78 61 71 42 82 53 62 6
  • 在 json 模式中定义键值对的正确方法是什么

    如何在 json 模式中定义键值对对象 正确 方式 我想定义这个 id 99 info name somename href someUrl 以下两项是否准确 1 type object name MyObj properties id t
  • 编写依赖于其他键的更复杂的 json 模式

    我一直在编写简单的 JSON 模式 但遇到了一个稍微复杂一点的 API 输入调用 我有一条宁静的最终路线 可以采用 3 种截然不同类型的 JSON 本地主机 foo 可以采取 类型 冰淇淋 锥体 华夫饼 or 类型 热狗 小圆面包 小麦 如
  • 为 ASP.Net Web API 生成 JSON 架构

    我希望为 WebAPI 生成 JSON 架构 包括 XML 注释中的文档 主要是为了我可以将其导入到我们的 API 文档中 使用 apiary io 我已经设法通过添加 swagger 和 swashbuckle 然后在每个服务上使用原始链
  • JSON 模式中的小数精度

    我想让我的 JSON 架构验证发送到我的 REST api 的小数位数不超过两位 从我在最新的 JSON Schema RFC v4 中看到的情况来看 不允许这样做 V1 有一个 maxDecimals 验证器 有谁知道为什么被删除 我有一
  • 使用对象键作为 JSON 架构中的类型

    假设我想根据 Intellij IDEA 中的 JSON 架构验证 YAML 文件 该文件的结构如下 foo command touch tmp a txt I know I don t need this but it s an exam

随机推荐