基于属性之一的 JSON 模式 anyOf 验证

2024-03-27

我很难弄清楚如何根据其中一个属性的值验证对象数组。所以我有一个 JSON 对象,例如:

{
    "items": [
        {
            "name": "foo",
            "otherProperty": "bar"
        },
        {
            "name": "foo2",
            "otherProperty2": "baz",
            "otherProperty3": "baz2"
        },
        {
            "name": "imInvalid"
        }
    ]
}

我想说的是

  1. items 可以包含任何对象,其中名称可以是“foo”或“foo2”
  2. 如果它是“foo”那么唯一有效的其他属性(必需)是 “其他财产”
  3. 如果名称是“foo2”,则唯一有效的其他名称 属性“otherProperty2”和“otherProperty3”都是必需的
  4. 除了“foo”和“foo2”之外,“name”的其他值均无效
  5. 对象本身在 items 数组中是可选的,有些可能会重复。

我尝试了各种各样的事情,但当我验证时,我似乎不会失败。例如,名称“imInvalid”应该会导致验证错误。这是我对架构的最新迭代。我缺少什么?

{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "type": "object",
    "required": ["items"],
    "properties": {
        "items": {
            "type": "array",
            "minItems": 1,
            "additionalProperties": false,
            "properties": {
                "name": {
                    "anyOf": [
                        {
                            "type": "object",
                            "required": ["name", "otherProperty"],
                            "additionalProperties": false,
                            "properties": {
                                "otherProperty": { "type": "string" },
                                "name": { "enum": [ "foo" ] }
                            }
                        },{
                            "type": "object",
                            "required": ["name", "otherProperty2", "otherProperty3" ],
                            "additionalProperties": false,
                            "properties": {
                                "otherProperty2": { "type": "string" },
                                "otherProperty3": { "type": "string" },
                                "name": { "enum": [ "foo2" ] }
                            }
                        }
                    ]
                }
            }
        }
    }
}

您已经了解了使用枚举来分隔匹配内容的基本思想,但这里有一些错误:

  • Json 架构数组没有properties, 他们有items.
  • 在您定义的这些属性中name作为保存其他 json 模式对象的属性。
  • 在您定义的架构的第二个分支中otherProperty3但在您的示例中,该属性被称为anotherProperty3

尝试这个稍微修改过的版本:

{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"required": ["items"],
"properties": {
    "items": {
        "type": "array",
        "minItems": 1,
        "additionalProperties": false,
        "items": {
            "anyOf": [
                {
                    "type": "object",
                    "required": ["name", "otherProperty"],
                    "additionalProperties": false,
                    "properties": {
                        "otherProperty": { "type": "string" },
                        "name": { "enum": [ "foo" ] }
                    }
                },{
                    "type": "object",
                    "required": ["name", "otherProperty2", "anotherProperty3" ],
                    "additionalProperties": false,
                    "properties": {
                        "otherProperty2": { "type": "string" },
                        "anotherProperty3": { "type": "string" },
                        "name": { "enum": [ "foo2" ] }
                    }
                }
            ]
        }
    }
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于属性之一的 JSON 模式 anyOf 验证 的相关文章

  • 如何轻松地将 Ajax、perl 和 JSON 结合使用?

    我正在尝试使用 Ajax 制作一个网页 Example 我创建了一个 Perl CGU 文件来触发一个简单的帖子 文件 test cgi name 托马斯 回复短信 你的名字是托马斯 我创建了一个可以使用该帖子的 html 文件 但随后页面
  • JsonCpp - 当有 json::Value 对象时,我如何知道它的键名称?

    假设我有这个 Json 文件 id 0 使用 jsoncpp 我可以有一个Json Value通过这样做来对象 Json Value node root 0u id 好的 在代码的其他地方 我明白了node对象 我想从中获取一些信息 我可以
  • 按值对 JSON 进行排序

    我有一个非常简单的 JSON 对象 如下所示 people f name john l name doe sequence 0 title president url google com color 333333 f name micha
  • 如何对我的自定义验证属性进行单元测试

    我有一个自定义的 asp net mvc 类验证属性 我的问题是如何对其进行单元测试 测试类是否具有该属性是一回事 但这实际上并不能测试其中的逻辑 这就是我想测试的 Serializable EligabilityStudentDebtsA
  • 在android中从JSON生成listview

    我对 Android 完全陌生 目前正在尝试从从我的服务器中提取的 JSON 数组生成列表视图 我已经阅读了很多教程 但没有运气 有一种独特的方法可以做到这一点 请您指出一些适合开始的资源 我读过了this http www josecgo
  • 如何通过 JsonConvert.DeserializeObject 在动态 JSON 中使用 null 条件运算符

    我正在使用 Newtonsoft 反序列化已知的 JSON 对象并从中检索一些值 如果存在 关键在于对象结构可能会不断变化 因此我使用动态来遍历结构并检索值 由于对象结构不断变化 我使用 null 条件运算符来遍历 JSON 代码看起来像这
  • 从 json 数组获取值并执行 sql 插入

    这是我的数组 json 1 Device ID a9a3346be4375a92 Date 2012 05 31 Time 15 22 59 Latitude 51 4972912 Longitude 0 1108178 2 Device
  • json 解析器和编码器应如何处理转义的 unicode?

    json 规范允许在 json 字符串 格式为 uXXXX 中转义 unicode 它特别提到受限代码点 非字符 作为有效的转义代码点 这是否意味着解析器应该从包含非字符和受限代码点的字符串生成非法的 unicode 一个例子 key uF
  • jquery.validate:多个远程规则

    我计划使用两个远程规则验证单个文本字段 更多这样的 form validate rules remote url1 php remote url2 php messages remote Error1 remote Error2 这可能吗
  • Mandrill 验证错误

    很高兴能在 StackOverflow 上提出我的第一个问题 多年来我一直依靠它自学了很多东西 我的问题是这样的 尝试通过 Mandrill 的 API 发送邮件时出现以下错误 status error code 1 name Valida
  • 如何使用Gson仅从Json反序列化某些特定字段?

    我有以下 JSON 字符串 channel bvmt initValues data value instrumentIds TN0007250012 TN0007500010 instruments mnemonic ADWYA marc
  • init 后用 JSON 填充 select2 不起作用

    我正在尝试使用 JSON 数组填充 select2 元素 但我无法得到它 我有下一个数组 data id Foo text Foo id Bar text Bar 我初始化 select2 如下 selectElement select2
  • 在 swift 中将简单字符串转换为 JSON 字符串

    我知道有一个同标题的问题here https stackoverflow com questions 30825755 convert string to json string in swift 但在那个问题中 他试图将字典转换为 JSO
  • Postgres JSON 数据类型 Rails 查询

    我正在使用 Postgres 的 json 数据类型 但想要使用嵌套在 json 中的数据进行查询 排序 我想在 json 数据类型上使用 where 进行订购或查询 例如 我想查询关注者数量 gt 500 的用户 或者我想按关注者或关注数
  • Azure 应用服务在配置中添加字符串数组

    Net core 应用程序并在 Azure 应用服务中部署该应用程序 在我的应用程序中 我有一个包含以下内容的应用程序 settings json 文件 Roles Roles Admins Users 我的 ARM 模板中有以下配置 参数
  • 如何发送和接收大型 JSON 数据

    我对全栈开发比较陌生 目前正在尝试找出一种有效的方法send and fetch我的前端 React 和后端 Express 之间存在大量数据 同时最大限度地减少内存使用 具体来说 我正在构建一个地图应用程序 它需要我处理大型 JSON 文
  • 在 Node.js 中解析 Json(带有数组和对象)并将数据导出到 Excel 文件中

    我是 Node js 新手 我的要求是 我需要解析 JSON 并将数据导出到 Excel 文件中 其中包含 JSON 中的所有字段 我的 JSON 如下 id 1255 title The Brain and Nervous System
  • 如何在 pandas 中读取并标准化以下 json?

    我在 stackoverflow 中使用 pandas 看到了很多 json 读取问题 但我仍然无法解决这个简单的问题 Data session id 0 X061RFWB06K9V 1 5AZ2X2A9BHH5U unix timesta
  • 来自 iPhone/iPad 的 json Web 服务

    有人可以帮助我解决如何从 iphone 或 ipad 使用 json Web 服务的问题吗 这里我的要求是使用 API 密钥实现 json webservice 如果可能的话发布一些教程或示例链接 谢谢 规范的 JSON 处理库是here
  • 如何使用shell脚本从json字符串中grep特定字段值[重复]

    这个问题在这里已经有答案了 下面是文件中可用的 JSON 字符串 我需要从中提取值status在 shell 脚本中 预期输出 status success 响应 json eventDate null dateProccessed nul

随机推荐

  • -bash:react-native:找不到命令

    我已经成功安装了brew node 4 0 watchman和flow 当我安装时我收到了以下信息npm install g react native cli Users home node bin react native gt User
  • Bower:安装后“未找到命令”

    当我执行时我似乎得到以下信息npm install bower g usr local share npm bin bower gt usr local share npm lib node modules bower bin bower
  • ADT 到 Android Studio 意外的顶级异常

    因此 我正在尝试将 Eclipse ADT 项目迁移到 Android Studio 中 我使用 appcompat v7 项目作为 eclipse 中的库项目 我按照 Android 开发网站上的说明进行操作 但仍然收到此错误 Error
  • `ejabberdctl start` 导致“内核 pid 终止”错误 - 我该怎么办?

    我用谷歌搜索了三个小时但没有结果 我有一个 ejabberd 安装 但不是使用 apt 安装的 它是从源代码安装的 其中没有名为 ejabberd 的程序 启动和停止 一切都是通过 ejabberdctl 进行的 它完美地运行了一个月 突然
  • CDN 上的 Dojo 与自己安装的 Dojo

    我使用了相当多的 Dojo 但迄今为止我仅通过包含来自 AOL Google 等 CDN 来使用它 托管 Dojo 副本而不是通过 CDN 使用它是否有优势 我没有太多需要改变代码库 但我想还有其他优点 缺点 通过托管您自己的 Dojo 环
  • Tornado 如何在任意位置提供单个静态文件?

    我正在使用 Tornado 开发一个简单的网络应用程序 它提供一些动态文件和一些静态文件 动态文件不是问题 但我在提供静态文件时遇到问题 我想做的是在访问 foo json URL 时提供文件 path to foo json 请注意 pa
  • Docker 输出中缺少层 ID

    我刚刚按照官方指南在 Ubuntu 上全新安装了 Docker https docs docker com engine installation linux ubuntulinux https docs docker com engine
  • Laravel 4 如何在视图中显示 Flash 消息?

    我正在尝试显示我的闪存消息 这是我的路由文件中的 Route post users groups save function return Redirect to users groups gt withInput gt with succ
  • RemoteServiceServlet 和 RemoteService 有什么区别?

    我知道第一个是类 第二个是接口 但重点是 为什么客户服务应该扩展远程服务并为服务实现类扩展远程服务Servlet 那么幕后到底是什么 您正在尝试比较苹果和橙子 请阅读docs https developers google com web
  • 是否有一个运算符可以作为 concatMap 但具有多个内部可观察值

    我正在使用可观察的对象来查询我的数据库 该可观察对象将返回一个数组 其中包含找到的所有匹配对象 我的问题是我想将可观察值映射到我将从另一个 API 检索的更多详细信息 我尝试了 concatMap 但它只让我在初始可观察值中嵌套 1 个可观
  • 测试互联网连接的最快方法

    C 2008 SP1 我正在使用此代码连接到我们的客户网站 这是针对软件电话应用程序的 在用户拨打电话之前 软件电话必须测试是否存在有效的互联网连接 因此 我要做的就是使用 httpWebRequest 类连接到我们的客户网站 如果响应正常
  • iPhone 电子邮件应用程序启动 URL

    在 iPhone 上启动电子邮件和开始新电子邮件的 URL 是 mailto 电子邮件受保护 cdn cgi l email protection 我只想启动电子邮件应用程序 将用户放在主菜单或收件箱中 mailto 开始撰写新的空白电子邮
  • 在谷歌应用程序脚本中解析 html 的最佳方法是什么

    var page UrlFetchApp fetch contestURL var doc XmlService parse page 上面的代码在使用时会出现解析错误 但是如果我用已弃用的 Xml 类替换 XmlService 类 并设置
  • 跟踪文件(Windows 终端)的硬链接(重新分析点?)?

    如何跟踪文件的硬链接 重新分析点 管道传输到格式列表不会显示目标 至少在 powershell 7 中 你会得到一个小 ascii 箭头 该文件夹位于 env path 中 如果您没有 Windows 终端 则 MicrosoftEdge
  • 权限是不可更改的权限类型

    背景 我正在尝试新的 Tiles 和 TileService 并决定重新创建 USB Tethering 磁贴CyanogenMod https github com CyanogenMod android frameworks base
  • 现在N层架构意味着什么?

    从传统意义上讲 N 层意味着将应用程序分成 层 并将每个 层 放在不同的服务器上 这样做至少有 3 个原因 维护 a 代码维护 更容易进行错误修复和功能添加 b 硬件维护 关闭一台服务器不会中断其他层的服务 性能 一台服务器的速度通常不够快
  • Python - 在这种情况下列表理解是否有效?

    这是Python中的输入 脏 列表 input list n data1 n data2 n n data3 n 每个列表元素包含带有换行符的空格或带有换行符的数据 使用下面的代码清理它 cleaned up list data strip
  • 在 Archlinux 上通过 Pyenv 编译 Python 但缺少 OpenSSL

    我正在尝试在新安装的 ArchLinux 上通过 pyenv 安装 python pyenv install 3 5 1Downloading Python 3 5 1 tar xz gt https www python org ftp
  • Javascript 字符串替换为计算

    有没有办法解决javascript中字符串中的数学表达式 例如 假设我想生成字符串 Tom has 2 apples Lucy has 3 apples Together they have 5 apples 但我希望能够替换变量 我可以通
  • 基于属性之一的 JSON 模式 anyOf 验证

    我很难弄清楚如何根据其中一个属性的值验证对象数组 所以我有一个 JSON 对象 例如 items name foo otherProperty bar name foo2 otherProperty2 baz otherProperty3