当前位置: 首页 > 知识库问答 >
问题:

json-schema数组上需要的设置

郎思远
2023-03-14

我正在尝试弄清楚如何在我的json-Schema对象数组上设置必需属性在对象上正常工作,而不是数组。

以下是我的json模式的项目部分:

        "items": {
        "type": "array",
        "properties": {
            "item_id": {"type" : "number"},
            "quantity": {"type": "number"},
            "price": {"type" : "decimal"},
            "title": {"type": "string"},
            "description": {"type": "string"}
        },
        "required": ["item_id","quantity","price","title","description"],
        "additionalProperties" : false
    }

这是我发送的 json 数组。json验证应该会失败,因为我没有在这些项目中传递描述。

       "items": [
        {
            "item_id": 1,
            "quantity": 3,
            "price": 30,
            "title": "item1 new name"
        },
        {
            "item_id": 1,
            "quantity": 16,
            "price": 30,
            "title": "Test Two"
        }
    ]

共有3个答案

岳飞航
2023-03-14

也许您的验证程序仅支持 JSONSchema v3?

所需工作方式在 v3 和 v4 之间发生了变化:

  • 在v3中必需是一个布尔值:https://datatracker.ietf.org/doc/html/draft-zyp-json-schema-03#section-5.7
  • 在v4中必需是一个字符串数组(就像在您的示例中一样):https://datatracker.ietf.org/doc/html/draft-fge-json-schema-validation-00#section-5.4.3
邰棋
2023-03-14

我知道这是一个古老的话题,但是因为这个问题是从jsonschema.net链接起来的,我想它可能值得插一脚…

您的原始示例的问题是,您为“数组”类型声明“属性”,而不是为数组声明“项”,然后声明填充数组的“对象”类型(带有“属性”)。下面是原始模式片段的修订版:

"items": {
    "type": "array",
    "items": {
        "type": "object",
        "properties": {
            "item_id": {"type" : "number"},
            "quantity": {"type": "number"},
            "price": {"type" : "decimal"},
            "title": {"type": "string"},
            "description": {"type": "string"}
        },
        "required": ["item_id","quantity","price","title","description"],
        "additionalProperties" : false
    }
}

我建议不要使用术语“items”作为数组的名称,以避免混淆,但是没有什么可以阻止你这样做......

糜凯泽
2023-03-14

我通过将数组元素的架构部分嵌套在名为item的对象中来使用这个验证器。该模式现在有两个嵌套的项目字段,但这是因为一个是JSONSchema中的关键字,另一个是因为您的JSON实际上有一个名为项目的字段

JSONSchema:

{
   "type":"object",
   "properties":{
      "items":{
         "type":"array",
         "items":{
            "properties":{
               "item_id":{
                  "type":"number"
               },
               "quantity":{
                  "type":"number"
               },
               "price":{
                  "type":"number"
               },
               "title":{
                  "type":"string"
               },
               "description":{
                  "type":"string"
               }
            },
            "required":[
               "item_id",
               "quantity",
               "price",
               "title",
               "description"
            ],
            "additionalProperties":false
         }
      }
   }
}

JSON:

{
   "items":[
      {
         "item_id":1,
         "quantity":3,
         "price":30,
         "title":"item1 new name"
      },
      {
         "item_id":1,
         "quantity":16,
         "price":30,
         "title":"Test Two"
      }
   ]
}

输出中包含两个关于缺少描述字段的错误:

[ {
  "level" : "error",
  "schema" : {
    "loadingURI" : "#",
    "pointer" : "/properties/items/items"
  },
  "instance" : {
    "pointer" : "/items/0"
  },
  "domain" : "validation",
  "keyword" : "required",
  "message" : "missing required property(ies)",
  "required" : [ "description", "item_id", "price", "quantity", "title" ],
  "missing" : [ "description" ]
}, {
  "level" : "error",
  "schema" : {
    "loadingURI" : "#",
    "pointer" : "/properties/items/items"
  },
  "instance" : {
    "pointer" : "/items/1"
  },
  "domain" : "validation",
  "keyword" : "required",
  "message" : "missing required property(ies)",
  "required" : [ "description", "item_id", "price", "quantity", "title" ],
  "missing" : [ "description" ]
} ]

尝试将上面的内容粘贴到这里,查看生成的相同输出。

 类似资料:
  • 我正在努力使用 JOLT 转换复杂的 json。 输入JSON: 预期输出: 我无法理解如何在基于“字段名称”的输出中访问和分配“字段值”。请帮我做一下震动测试。 注意:输入JSON中的名称、标题和公司的顺序将是混乱和随机的,这意味着在“data”数组下,第一个对象仅与“Name”相关不是强制性的。

  • 主要内容:什么是 JSON Schema,定义 Schema,使用 JSON Schema 进行验证JSON Schema 是一个描述和验证 JSON 数据结构的强大工具,我们可以把 JSON Schema 看作是一种规范,这个规范中规定了 JSON 数据的结构、键的命名、值的类型等等,通过规范可以校验指定的 JSON 数据,保证数据的准确。所以在接口调试过程中,经常使用 JSON Schema 来校验接口数据的准确性。 什么是 JSON Schema JSON Schema 译为“JSON模式

  • 我正在循环访问不同的进程 ID 以访问 json 中的数据并将其复制到我的电子表格中。但是,某些进程 ID 不包含任何数据,每次我的代码到达这些空数组时,我都会收到错误。我已经尝试了if语句的不同变体来跳过这个,但仍然得到一个错误。空数组位于“expectRateSetList” 我尝试了不同的if语句来跳过这一步,但仍然得到一个错误。我已经尝试了“如果J为空,如果J什么都不是,如果J为空”等等,

  • JSON Schema 用于描述JSON数据的结构和类型。如同DTD与XML的关系。 本实现用于使用 PHP 调用 JSON Schema 对 JSON 数据进行验证。 生成 JSON Schema 由JSON生成一个全格式的Schema,方便编辑修改(勿随便直接使用在实践中)。 $value = new stdClass();$value->name = 'a name';$value->age

  • json-schema-editor An intuitive editor for JSON schema which provides a tree view to present structure of schema and a property inspector to edit the properties of schema element.Develop with Vue.js 2

  • 问题内容: 我正在使用jQuery的parseJSON()函数将json字符串插入变量中。问题是,它正在将我的数据变成一个对象,而不是一个二维数组。例如, 问题是,“名称”不应该是 键 (假设这是正确的术语)。相反,它应该是: 我将如何转换呢?还是有一个不同于使用for循环遍历数组索引的方法(但仍然可以像在2d数组中一样,以字符串形式访问键和值)。 编辑:这是一些正在使用的json(请注意,它的使