如何在 json 模式中创建模式引用的嵌套列表(数组)

2024-04-13

我正在尝试构建一个架构,其中包含我想要强制架构的项目列表。

基本上这是我想要根据架构验证的数据:

data = {
    "VIN" : "123",
    "timestamp" : "xxxx",
    "model" : "jeep",
    "inspections": [
        { "door_badge" : 
             {
                "expected": "yes",
                "image": "/image/path/here",
                "state": 1
            },
        },
        {
            "rear_badge" :
            {
                "expected" : "yes",
                "image" : "/image/path/here",
                "state": 1
            }


        }
    ],
}

我的模式映射本身就是这样,但在尝试验证时似乎出现错误:

schema = {
    "$schema": "http://json-schema.org/draft-04/schema#",
    "definitions": {
        "inspection": {
            "type": "object",
            "properties": {
                "expected" : { "type": "string" },
                "found": { "type" : "string"},
                "state" : { "enum" : [0,1] },
                "image" : { "type" : "string"}
            },
            "required": ["state", "image"]
        },
        "inspections" : {
            "type" : "array",
            "items" : {
                "$ref" : "#/definitions/inspection"
            },
            "required" : ["items"]
        },

    },
    "type" : "object",
    "properties" : {
        "VIN" : { "type" : "string" },
        "timestamp" : { "type" : "string"},
        "model" : { "type" : "string"},
        "inspections" : { "$ref" : "#/definitions/inspections"}
    },
    "required": ["VIN", "timestamp", "model"]
}

我基本上想要检查列表中的子列表,但也希望根据该类型的项目进行验证。


解决方案: 感谢 jruizaranguren 的帮助,解决方案是:

schema = {
    "$schema": "http://json-schema.org/draft-04/schema#",
    "definitions": {
        "inspection": {
            "type": "object",
            "properties": {
                "expected" : { "type": "string" },
                "found": { "type" : "string"},
                "state" : { "enum" : [0,1] },
                "image" : { "type" : "string"}
            },
            "required": ["state", "image", "expected"]
        },
    },
    "type" : "object",
    "properties" : {
        "VIN" : { "type" : "string" },
        "timestamp" : { "type" : "string"},
        "model" : { "type" : "string"},
        "inspections" : { 
            "type" : "array",
            "items" : {
                "type" : "object",
                "maxProperties": 1,
                "minProperties": 1,
                "additionalProperties" : {
                    "$ref" : "#/definitions/inspection"
                }
            }
        }
    },
    "required": ["VIN", "timestamp", "model", "inspections"]
}

您遇到的问题是您将数组中的每个项目限制为以下形式:

{
    "expected": "yes",
    "image": "/image/path/here",
    "state": 1
}

但你的对象的形式是:

{ "door_badge" : 
    {
        "expected": "yes",
        "image": "/image/path/here",
         "state": 1
    },
}

实现这一目标的一种方法是使用additionalProperties in the items clause:

"items" : 
    { 
            "type" : "object",
            "maxProperties": 1,
            "minProperties": 1,
            "additionalProperties" : {
                "$ref" : "#/definitions/inspection"
            }
    }

如果您可以对这些属性键强制执行一些规则(例如,所有属性都必须以badge)那么你可以使用patternProperties带有正则表达式的子句。

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

如何在 json 模式中创建模式引用的嵌套列表(数组) 的相关文章

随机推荐

  • doc2vec 获得良好性能所需的最小数据集大小是多少?

    在不同大小的数据集上进行训练时 doc2vec 的表现如何 原始语料库中没有提到数据集大小 所以我想知道从 doc2vec 中获得良好性能所需的最小大小是多少 有很多东西被称为 doc2vec 但它似乎最常指的是 Le 和 Mikolov
  • Powershell 将变量传递给带有通配符的过滤器

    我在这方面遇到了困难 我知道这可能是一个简单的语法问题 我不知道如何将此变量传递到代码块中并正确确认它 user Some Person 这正如我所期望的那样 get aduser filter Samaccountname eq user
  • 时间:2019-03-17 标签:c#InfragisticsUltraChartLineChart

    有人可以提供一个从数据表将线系列添加到 UltraChart 的简单示例吗 该表具有时间序列值 x 轴上的时间值 y 轴上的测量 双精度 值 到目前为止 我见过的将时间序列添加到图表中的唯一示例是针对一组有限的硬编码数据点 我希望能够从表中
  • 如何从字符串中提取数字?

    我有包含路径的字符串 string toto titi 12 tata 2 abc def 我只想从该字符串中提取数字 要提取第一个数字 tmp string toto titi num1 tmp tata 要提取第二个数字 tmp str
  • 从 Oracle 转换为日期时间

    我知道有很多类似的问题 但我找不到我要找的东西 这是我的甲骨文日期 string testdate 2014 01 07 15 00 00 0000000 这是我尝试转换为日期时间的方法 DateTime ParseExact testda
  • ASP.NET MVC - 模型绑定一组动态生成的复选框 - 如何

    我正在尝试对一组动态生成的复选框进行模型绑定 以便在控制器操作中处理它们 但无法进行模型绑定 这是场景 我的 ViewModel 类 DocumentAddEditModel 包含一个字典 Dictionary 其中每个条目的字符串是每个复
  • Python opencv 检测棋盘

    我正在尝试获取棋盘图案的角点 并认为我可以将 openCV 与cv2 findChessboardCorners 但是 我找不到传递给该函数的良好参数 以便它成功检测棋盘 我认为该图像适合此功能 如果不是 我不知道我应该做什么预处理 这是我
  • 简单的 MySQL 语法错误 [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我正在运行以下代码 但找不到错误是什么 谁能建议我应该检查什么 result mysql query SELECT FROM ta
  • Elastic Beanstalk 运行部署后脚本

    我的 Node js 应用程序由两部分组成 一个 Express 后端和一个 React 前端 我在这个结构中有两个 package json 文件 package json app package json 我想要做的是在我的前端文件夹应
  • 在标题中添加图像标题和/或描述

    是否可以操纵图像标题的输出内容以这种方式 不仅在每个图像下输出标题 而且还输出图像标题和 或描述 在媒体库中定义 可能通过functions php 是的 可以操纵the content 您想要做的最简单的方法是在您的functions p
  • NSUserDefaults 和 Lion 下的沙箱

    根据 Apple 的要求 将我的项目之一移至支持沙箱 我像这样使用 UserDefaults NSUserDefaults standardUserDefaults setObject myNumber forKey myNumberKey
  • 使用 XSLT 将 XML 转换为 JSON

    我想使用 XSLT 将一些 XML 转换为 JSON XML 如下所示
  • InnoDB导致MySQL无法重启

    我无法重新启动 MySQL 或从 InnoDB 表 恢复 MySQL 我有一个使用 Ubuntu 16 04 的 WSL 由于 未知 的意外 早上我无法访问 MySQL 尝试重新启动它 所有错误 尝试了有关 InnoDB 和日志 文件的所有
  • 告诉 git 不要合并二进制文件而是选择

    当二进制文件 swf jar 和 flv 在本地更改时 我尝试引入更改 git 会尝试合并它们并报告冲突 然后 我分支到一个临时分支 并提交本地更改的二进制文件 并在拉取后使用递归策略将它们合并回来 太多工作 有没有办法告诉 git 不要尝
  • 什么是 Ruby on Rails Action 电缆适配器?

    通过 RoR 动作电缆导轨查看http edgeguides rubyonrails org action cable overview html subscription adapter http edgeguides rubyonrai
  • h5py 是否将整个文件读入内存?

    h5py是否将整个文件读取到内存中 如果是这样 如果我有一个非常非常大的文件怎么办 如果不是的话 我每次要单个数据就从硬盘取数据会不会很慢 我怎样才能让它更快 h5py是否将整个文件读取到内存中 不 不是的 特别是 切片 dataset 5
  • 使用 CMake 在主项目之前强制构建外部项目(使用 buildtools)

    我想在开始构建我的主项目之前构建 gsl 我将以下行添加到 rootCMakeLists txt file cmake minimum required VERSION 2 8 project moose include CheckIncl
  • 在pytorch张量中过滤数据

    我有一个张量X like 0 1 0 5 1 0 0 1 2 0 我想实现一个名为的函数filter positive 它可以将正数据过滤成新的张量并返回原始张量的索引 例如 new tensor index filter positive
  • 如何查找联系人图像支持的最大图像尺寸?

    背景 从 jelly bean 4 1 开始 android 现在支持联系人图像720x720 http developer android com about versions jelly bean html android 41 之前
  • 如何在 json 模式中创建模式引用的嵌套列表(数组)

    我正在尝试构建一个架构 其中包含我想要强制架构的项目列表 基本上这是我想要根据架构验证的数据 data VIN 123 timestamp xxxx model jeep inspections door badge expected ye