如何为对象数组编写 JSON 模式?

2024-01-02

我的 JSON 字符串的格式如下:

{
    "count":3,
    "data":[
        {
            "a":{"ax":1}
        },
        {
            "b":{"bx":2}
        },
        {
            "c":{"cx":4}
        }
    ]
}

The data数组包含很多a and b and c。并且没有其他种类的物体。

If count==0, data应该是一个空数组[].

我在用着https://github.com/hoxworth/json-schema https://github.com/hoxworth/json-schema在 Ruby 中验证此类 JSON 对象。

require 'rubygems'
require 'json-schema'

p JSON::Validator.fully_validate('schema.json',"test.json")

The schema.json is:

{
  "type":"object",
  "$schema": "http://json-schema.org/draft-03/schema",
  "required":true,
  "properties":{
     "count": { "type":"number", "id": "count", "required":true },
     "data": { "type":"array", "id": "data", "required":true,
       "items":[
           { "type":"object", "required":false, "properties":{ "a": { "type":"object", "id": "a", "required":true, "properties":{ "ax": { "type":"number", "id": "ax", "required":true } } } } },
           { "type":"object",  "required":false, "properties":{ "b": { "type":"object", "id": "b", "required":true, "properties":{ "bx": { "type":"number", "id": "bx", "required":true } } } } },
           { "type":"object",  "required":false, "properties":{ "c": { "type":"object", "id": "c", "required":true, "properties":{ "cx": { "type":"number", "id": "cx", "required":true } } } } }
       ]
     }
  }
}

但这对于test.json将通过验证,而我认为它应该失败:

{
  "count":3,
  "data":[
      {
          "a":{"ax":1}
      },
      {
          "b":{"bx":2}
      },
      {
          "c":{"cx":2}
      },
      {
          "c": {"z":"aa"}
      }
   ]
}

这作为test.json会失败,而我认为它应该通过:

{
  "count":3,
  "data":[
      {
          "a":{"ax":1}
      },
      {
          "b":{"bx":2}
      }
   ]
}

似乎错误的模式正在验证data数组包含a,b,c once.

正确的模式应该是什么?


来自JSON 模式规范 https://datatracker.ietf.org/doc/html/draft-zyp-json-schema-03#section-5.5,第 5.5 节。项目:

当此属性值是模式和实例的数组时
value 是一个数组,实例数组中的每个位置必须符合
到该数组相应位置的模式。这
称为元组类型。

您的架构定义要求数组的前三个元素恰好是“a”、“b”和“c”元素。如果items留空,允许任何数组元素。同样,如果additionalItems留空,允许任何附加数组元素。

为了得到你想要的,你需要指定"additionalItems": false并为items,我认为以下内容(从您的定义中稍微缩短)应该有效:

"items": {
  "type": [
     {"type":"object", "properties": {"a": {"type": "object", "properties": {"ax": { "type":"number"}}}}},
     {"type":"object", "properties": {"b": {"type": "object", "properties": {"bx": { "type":"number"}}}}},
     {"type":"object", "properties": {"c": {"type": "object", "properties": {"cx": { "type":"number"}}}}}
  ]
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何为对象数组编写 JSON 模式? 的相关文章

  • 将表类型添加到 JSON 编辑器

    我想了解的代码这个 JSON 编辑器 http mb21 github io JSONedit 并修改它 In 指令 js https github com mb21 JSONedit blob gh pages js directives
  • 如何从 Rails 中的枚举值获取键名?

    我的模型中有一个与数据库中的列相对应的枚举 枚举看起来像 enum efficency High 0 Medium 1 Low 2 如何从值中获取密钥 例如 我的值为 0 我需要获取值 High 任何帮助 将不胜感激 Model effic
  • 如何在 Rails 中重定向到 404?

    我想在 Rails 中 伪造 404 页面 在 PHP 中 我只发送一个带有错误代码的标头 如下所示 header HTTP 1 0 404 Not Found Rails 是如何做到这一点的 不要自己渲染 404 没有理由这样做 Rail
  • 在json文件中导出neo4j数据库

    我想以 JSON 文件导出 Neo4j 图形数据库 This is a Export JSON button in Neo4j web UI version as shown in attached image below 但是 Neo4j
  • postgresql to_json() 函数转义所有双引号字符

    我编写了一个 plpgsql 脚本 它在字符串中生成一个 json 对象数组 但是在我使用 to json 方法将带有该字符串的变量传递给它之后 它返回一个带双引号的结果 并且每个双引号字符都被转义 但我需要原样的字符串 jsonResul
  • Express 不断将 request.body 获取为未定义的 JSON 对象

    我正在发出一个 Ajax 请求 如下所示 ajax url gen type POST data JSON stringify one 1 two 2 success function data console log this 我的快递部
  • 使用架构定义验证 JSON 对象

    只要我们可以根据预定义的模式 即 XSD 或 DTD 验证传入的 XML 文件 我们就可以对传入的 JSON 对象执行验证 有可用的 JSON 架构定义吗 有一个工作草案JSON 模式 http json schema org 您还可以看一
  • 从 Python 将分层 JSON 数据写入 Excel xls?

    我想将一些数据从 python 写入 xlsx 我目前将其存储为 JSON 但它从 Python 中输出什么并不重要 单个文章的 JSON 如下所示 Word Count 50 Key Words Blah blah blah Foo Fr
  • Windows Phone 的 JSON 反序列化

    我正在尝试反序列化以下 JSON 但我真的不知道如何使用 JSON net 来完成这项工作 我正在使用 C 和 JSON Net 库 我的 JSON 如下 found 3 bounds 43 54919 172 62148 43 54487
  • 使用 Squeal 时可以有条件地在 where 块中添加子句吗?

    首先 我使用 Rails v3 2 9 和 Squeel 1 0 13 这就是我想要做的 我想使用三项身份信息中的任何一项来搜索客户 姓名 出生日期 dob 和社会保险号码 sin 结果集必须包括具有任何标识符 条件的 OR 的任何记录 我
  • 为什么 python 3 中的 json.dumps() 返回与 python 2 不同的值? [复制]

    这个问题在这里已经有答案了 我需要在 Python 3 中生成 MD5 哈希 以便与在 Python 2 上生成的 MD5 哈希进行比较 但 json dumps 的结果不同 因为在 Python 2 上 元素的位置发生了变化 MD5 结果
  • Ruby on Rails 中的块调用

    我正在尝试清理我的代码并摆脱许多丑陋的哈希值 在我看来 我定义了几个这样的操作 actions interest gt Show interest link to disabled gt true follow gt Follow this
  • “JSON”附近的语法不正确 - SQL Server 2016

    所以我最近安装了SQL Server 2016 CTP3主要是为了JSON输出功能 我正在尝试在我的 SQL 查询中使用它 就像 MSDN 上下面的链接中显示的那样 关键字 JSON 不会变成蓝色并给出错误 JSON 附近的语法不正确 可能
  • 如何将具有固定模式的值数组反序列化为强类型数据类?

    我在找出一种干净的 尽可能 方法来以特定格式反序列化某些 JSON 数据时遇到了一些麻烦 我想将数据反序列化为强类型数据对象类 对于具体细节非常灵活 以下是数据的示例 timestamp 1473730993 total players 9
  • LazyAdapter 上的 TextView 显示错误数据

    我已经基于此成功使用 ListView 和 LazyAdapter 构建了一个应用程序link https stackoverflow com questions 541966 android how do i do a lazy load
  • 如何突出显示2个html文件之间的差异

    我的网络应用程序有职位描述 某些用户可以修改这些职位描述 每次修改都会产生新版本的职位描述 职位描述的内容由用户使用tinymce 编辑器直接在textarea 中以html 形式进行编辑 我希望能够向用户展示内容从一个版本到另一个版本所做
  • RestKit:带有数组的动态嵌套属性

    我正在努力寻找一种将一些 JSON 映射到 RestKit 的方法 这是我正在查看的示例 results Test1 id 1 name Test 1 here language English type Test1 Test2 id 3
  • 如何让 Ruby 找到本地库?

    我在 usr local lib 中安装了一些本机库 我现在正在尝试安装一个需要这些的 gem 正确构建 但是 gem 构建失败 因为它找不到 图书馆 gem 的 extconf rb 文件尝试确认它可以找到该库have library 但
  • Ruby on Rails 3:“超类与类不匹配......”

    平台 Mac OSX 10 6 在我的终端中 我使用 rails c 启动 Ruby 控制台 按照 Ruby on Rails 3 教程构建一个类 class Word lt String def palindrome check if a
  • 用于验证一个参数的多种类型和值的 json 架构

    请在这件事上给予我帮助 我尝试编写一个 json 模式来验证以下对象 json 对象 param value 可能的值 all 任意整数的数组 所以它是一个简单的 json 对象 其中包含一个变量 可以是字符串 all 也可以是任何整数数组

随机推荐

  • 从 Hibernate 3 迁移到 4 会减慢启动速度

    我们正在尝试将我们的项目从 hibernate 3 迁移到 hibernate 4 一切工作正常 但问题是启动 我们不使用 JPA 我们直接使用 hibernate 以及 xml 文件和映射文件
  • SVG 渐变不起作用

    我有一个 svg 我需要用渐变填充它 css 是由脚本添加的 如果你使用单一 RGB 颜色 一切都可以正常工作 但使用渐变时 SVG 会产生白色背景 脚本后的结果代码
  • RibbonComboBox 选定的图库项目在鼠标离开时恢复为旧值

    我已将 WPF 功能区替换为最新的库 组合框选择更改会触发数据网格的重新加载 我的 RibbonComboBox 有问题 如果我将鼠标光标移出所选项目 则所选项目将恢复为旧项目 如果我将光标保持在所选项目上直到数据网格重新加载完成 则新值将
  • scala 中什么时候必须使用分号?

    我正在学习如何在 Scala 中编程 并被告知分号在 Scala 中是可选的 因此 考虑到这一点 我尝试使用以下没有分号的嵌套代码块 但是 它会在 Scala REPL 中引发错误 scala gt val a 1 val b a 2 va
  • 在Java中查找字符串中子字符串的第二次出现

    我们得到一个字符串 比如说 itiswhatitis 和一个子串 比如说 is 我需要找到的索引 i 当字符串 is 在原始字符串中第二次出现 String indexOf is 在这种情况下将返回 2 在这种情况下我希望输出为 10 使用
  • 在VB中替换单个字符串中的多个字符

    是否可以在 Visual Basic 中替换字符串中的多个字符 例如 mary had a little lamb 全信a必须改为z all m必须改为y all t必须改为x只需一行代码 结果是Replace是一个字符串 可以连接多个替换
  • 玩2.5,休眠:表未映射

    我在下面遇到了异常 例外是 org hibernate hql internal ast QuerySyntaxException 用户未映射 调用此代码时发生了这种情况 TypedQuery
  • 变量检查,有些不对劲

    我花了一些时间在互联网上搜索此代码的部分来解决它 但是一旦进入我的代码 它似乎不起作用 程序执行到这一步后 无论我输入什么 它都不会显示密码强度 而是显示一个空格 if EnteredPassword isupper or EnteredP
  • 将 nil 赋给 TImage.Picture.Graphic 来清除图片后,如何再次使用它?

    在下面的代码中 我清除了btnSaveClick中的图片 稍后在btnLoadClick中我想将图片分配给图像 但它给出了AV 因为Graphic对象不存在 我怎样才能完成任务 procedure TForm1 btnSaveClick S
  • GCC 4.4:避免在 gcc 中对 switch/case 语句进行范围检查?

    这只是 4 4 之前的 GCC 版本的问题 在 GCC 4 5 中已修复 https gcc gnu org bugzilla show bug cgi id 43462 是否可以告诉编译器 switch 中使用的变量适合提供的 case
  • 如何使用 Material Components Web Foundations

    使用材质组件 我试图弄清楚如何使用组件基础的方法 举个例子 我有 div class mdc linear progress div class mdc linear progress buffering dots div div clas
  • Java - 具有显示箭头的按钮

    我想要一个 Java 中的按钮 它显示箭头 就像键盘上一样 到目前为止我有这个 JButton arrowUp new JButton JButton arrowDown new JButton v JButton arrowLeft ne
  • 如何使用 pandas 查找列的最大值并根据条件按顺序排列它们?

    我有以下数据框 import pandas as pd import numpy as np d ID 1 2 3 4 5 6 Price1 5 9 4 3 9 np nan Price2 9 10 13 14 18 np nan Pric
  • PHP 和 MySQLi - 无法通过[重复]中的引用传递参数 2

    这个问题在这里已经有答案了 我正在尝试创建一个函数来检查更新并插入一些数据 但我在第一步中遇到了问题 其中 stmt gt bind param 表示没有通过引用传递参数或类似的内容 我在下面附上了功能代码 public function
  • 如何使用 grails 中现有的 java 类

    如何从 Grails 应用程序调用驻留在现有 Java 类中的方法 是否有必要 建议将其包装在服务中 将您的源代码放入 src java 中 然后在conf spring resources groovy中 你可以这样做 例如 Place
  • 修剪 Struts2 文本字段字符串输入

    修剪该字符串的最佳方法是什么 放置修剪代码的最佳位置在哪里 假设我的 jsp 中有以下文本字段
  • AppEngine SDK 1.8.5 和 Eclipse Juno 不工作

    我已经在 3 台不同的机器上安装了 GWT 和 Appengine 的 Eclipse 插件 所有机器都使用 Juno 4 2 在每种情况下 我都会收到以下错误 所选的 App Engine SDK 无效 无法在 路径 初始化 App En
  • 使用伪元素覆盖滚动的div

    我想用伪元素覆盖来覆盖动态滚动内容的 div 我遇到的问题是覆盖层随内容一起滚动 使折叠下方的任何内容都裸露 当下面的内容滚动时 如何允许覆盖层保持在原位 wantOverlay width 200px height 100px overf
  • 使用 secondary_y 轴绘制 groupby 数据

    我想绘制 12 个图表 每月一张图表 包括列 A and B 在左侧 y 轴和列上 C 在右侧 下面的代码将所有内容绘制在左侧 import pandas as pd index pd date range 2011 1 1 00 00 0
  • 如何为对象数组编写 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