基于属性值的条件 Json 模式验证

2024-03-10

我的输入 json 如下所示,

{
  "results": [
    {
      "name": "A",
      "testA": "testAValue"
    }
  ]
}

条件是,如果“name”的值为“A”,则“testA”应为必填字段,如果“name”的值为“B”,则“testB”应为必填字段。

这是我尝试过的 Json 架构,但它没有按预期工作,

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "required": [
    "results"
  ],
  "properties": {
    "results": {
      "type": "array",
      "oneOf": [
        {
          "$ref": "#/definitions/person"
        },
        {
          "$ref": "#/definitions/company"
        }
      ]
    }
  },
  "definitions": {
    "person": {
      "type": "object",
      "required": [
        "name",
        "testA"
      ],
      "properties": {
        "name": {
          "type": "string",
          "enum": [
            "A"
          ]
        },
        "testA": {
          "type": "string"
        }
      }
    },
    "company": {
      "type": "object",
      "required": [
        "name",
        "testB"
      ],
      "properties": {
        "name": {
          "type": "string",
          "enum": [
            "B"
          ]
        },
        "testB": {
          "type": "string"
        }
      }
    }
  }
}

尝试过“依赖关系”也在 JSON Schema 中,但无法找到正确的解决方案。

任何使用示例 JSON 架构来实现上述用例的帮助/解决方法都值得赞赏。


你很接近了。你的oneOf需要在items关键词。

{
    "type": "array",
    "items": {
        "oneOf": [
            { "$ref": "#/definitions/person" },
            { "$ref": "#/definitions/company" }
        ]
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于属性值的条件 Json 模式验证 的相关文章

随机推荐

  • 我想禁用特定航空窗口上的阴影效果

    我想禁用特定航空窗口上的阴影效果 我所拥有的只是该窗口的 HWND 这可能吗 阴影由操作系统当前使用的主题定义 您不能仅针对一个窗口禁用它 您可以更改主题并禁用阴影 但这将是系统范围内的更改 而不是特定于某个窗口 就您而言 最好的方法之一是
  • 从 SSIS 执行 SQL 任务返回整数值

    我正在使用 SQL Server 2005 Business Intelligence Studio 并努力从一个非常简单的执行 SQL 任务返回一个整数值 为了一个非常简单的测试 我将 SQL 语句编写为 Select 35 As Tot
  • NSManagedObjectModel - 动态创建模型

    谁能给我指点一下在 Xcode 中动态构建核心数据模型的教程吗 我发现的所有教程都是基于静态设计 但苹果文档说可以以编程方式构建模型 遗憾的是 苹果文档集中没有相关示例 你必须初始化一个NSManagedObjectModel 然后为模型中
  • Bash:无限睡眠(无限阻塞)

    I use startx启动 X 它将评估我的 xinitrc In my xinitrc我使用启动窗口管理器 usr bin mywm 现在 如果我终止我的 WM 为了测试其他 WM X 也会终止 因为 xinitrc脚本到达 EOF 所
  • 如何让 ServiceStack 身份验证发挥作用? (使用 iPhone 客户端)

    我们聘请了一名承包商 他正在为我们编写 iPhone 应用程序 我开始使用 ServiceStack 为其编写后端服务 我在一般授权方面遇到了困难 使用什么样的授权以及如何实现它 我对 ServiceStack HTTP 和授权不太了解 还
  • JFormattedTextField 中严格的 24 小时时间

    我正在尝试创建一个仅接受 24 小时时间的 JFormattedTextField 我非常接近解决方案 但有一种情况以下代码示例不起作用 如果输入时间 222 并从字段中更改焦点 时间将更正为 2202 我希望它只接受完整的 4 位数 24
  • 为 SQL Server 中的特定记录生成脚本

    这可能是一个有限但有价值的场景 我有一个 SQL Server 2008 数据库 其中有一个包含数百万条记录的表 一些记录似乎存在间歇性问题 我正在尝试重现该问题 为了做到这一点 我终于获得了违规记录的 ID 我想在我的 PROD 数据库中
  • 如何从 C# 代码重新启用 Gmail 中的弹出功能?

    我有一个从 Gmail 下载邮件的程序 我选择了单选按钮 为所有邮件启用 POP 甚至是已下载的邮件 下载邮件后 我的 Gmail 将上述状态更改为 对自当前日期以来到达的所有邮件启用 POP 我没有物理更改单选按钮 但它似乎自动将其设置为
  • 如何在剑道网格中加载大量数据

    网页方法
  • calloc(4, 6) 与 calloc(6, 4) 相同吗?

    我是一名初学者 C 程序员 我认为情况会如此 但如果可能的话希望得到一些肯定 如果它们是相同的 为什么不只取一个参数呢 之间没有真正的区别calloc a b and calloc b a 尽管如此 它们都分配相同数量的空间并适当填充它 元
  • 嵌套名称说明符

    我有一个类似的代码 namespace mymap template
  • 可拖动元素的包含

    如何定义可拖动对象的包含区域以使其可拖动到其父元素之外 我有两个可放置的容器 其中有可拖动的 div 我想在容器之间拖动包含的 div 但是 div 落在父容器的边框下方 而不是穿过父容器的边框 如果我设置了非常高的 z 索引 我只能让 d
  • 如何在 HTML5 Canvas 中使用动态旋转值绘制水印?

    我正在使用 HTML5 我正在尝试使用文本在图像上绘制水印 我有以下代码 div style width 612px height 792px div
  • 可可中的自定义主应用程序循环

    我一直在关注 Handmade Hero 项目 其中 Casey Muratori 从头开始 创建了一个完整的游戏引擎 而不使用库 该引擎具有高度可移植性 因为它呈现自己的位图 然后平台特定的代码将其绘制到屏幕上 在 Windows 下 通
  • C++ 类中的内联规则是什么?

    从我很久以前读到的内容来看 如果您希望在编译阶段内联类成员函数 则该函数必须在类声明块内定义 但这有一个缺点 那就是细节泄露 恕我直言 其他程序员在打开 h 文件时应该只看到类接口 第一个陈述在现代 C 中仍然正确吗 有没有办法强制内联声明
  • 错误:“已加载运行时 CuDNN 库:5005 但源是用 5103 编译的”是什么意思?

    我尝试将 TensorFlow 与 GPU 结合使用 但出现以下错误 I tensorflow core common runtime gpu gpu device cc 838 Creating TensorFlow device gpu
  • 在 ZF2 中创建具有依赖关系(依赖注入)的学说存储库

    我想创建一个具有硬依赖关系的存储库 我发现Jurian Sluisman 的这篇博文 https juriansluiman nl article 142 dependency injection in a doctrine reposit
  • Windows 在哪里存储 INI 文件的替代文件 (Delphi 7)

    我通常使用保存在应用程序自己的文件夹中的 INI 文件来编写 Delphi 应用程序 ConfigFile ChangeFileExt ParamStr 0 ini IniFile TIniFile Create ConfigFile tr
  • 表单中的第一个参数不能包含 nil 或为空 - Rails 4

    我在 Rails 中的联系表单中收到此错误 First argument in form cannot contain nil or be empty View and so on 控制器 def new contact Contact n
  • 基于属性值的条件 Json 模式验证

    我的输入 json 如下所示 results name A testA testAValue 条件是 如果 name 的值为 A 则 testA 应为必填字段 如果 name 的值为 B 则 testB 应为必填字段 这是我尝试过的 Jso