You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何验证含可变长度对象数组的JSON Schema?

问题

无法验证包含数组的JSON Schema,尤其是当不同请求中数组内的对象数量不同时。

示例响应:

{
  "name": "value",
  "id": "value",
  "arrayField": [],
  "objects": [
    {
      "Field1": "value",
      "Field2": false
    },
    {
      "Field1": "value",
      "Field2": true
    }
  ]
}

注意:其他请求的objects数组可能包含更多对象,需要确保每个对象中Field1和Field2字段存在且类型正确。

在Feature文件中使用的验证写法:

def expectedSchema = read('path to json')
match response == expectedSchema

尝试两种方案均失败:

  • 方案1:因对象数量不同验证失败
{
  "name": "#string",
  "id": "#string",
  "arrayField": "#array",
  "objects": [
    {
      "Field1": "#string",
      "Field2": "#boolean"
    },
    {
      "Field1": "#string",
      "Field2": "#boolean"
    }
  ]
}
  • 方案2:触发错误 $ | not equal | actual does not contain key - '#array' (MAP:MAP)
{
  "name": "#string",
  "id": "#string",
  "arrayField": "#array",
  "objects": "#array",
  "#array": [
    "Field1": "#string",
    "Field2": "#boolean"
  ]
}

请问是否存在可以成功验证该Schema的方法?


解决方案

使用数组元素匹配语法指定数组内对象的通用结构,就能解决数组长度不一致的校验问题,同时确保每个对象的字段符合要求。

正确的JSON Schema写法如下:

{
  "name": "#string",
  "id": "#string",
  "arrayField": "#array",
  "objects": "#array[#object]",
  "#object": {
    "Field1": "#string",
    "Field2": "#boolean"
  }
}

关键语法说明:

  • #array[#object]:声明objects是一个数组,且数组中的每一个元素都必须遵循#object定义的结构
  • #object:定义了数组内对象的强制字段和类型,不管数组有多少个元素,只要每个元素都满足这个规则就能通过校验

用这个Schema验证时,无论objects数组包含1个还是多个对象,只要每个对象都有字符串类型的Field1和布尔类型的Field2,就能顺利通过匹配,不会再因为数组长度不同或语法错误失败。

内容的提问来源于stack exchange,提问作者TimLks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 23:52:42