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

如何在Karate中匹配含可选嵌套JSON对象的响应?

Karate中实现可选键的JSON Schema匹配方案

Karate完全支持你需要的「可选键+统一子结构」匹配场景,当前报错是因为使用了严格相等断言==,它要求schema中定义的所有键必须在实际响应中存在。以下两种方案可以解决问题:

方法一:给可选键添加?标记

在schema的键名前加?,可直接标记该键为可选——实际响应中该键可存在或不存在,只要存在时子结构符合定义即可。修改后的代码如下:

Scenario:
  * def schema_optional =
  """
  {
    "a": ##string,
    "b": ##number
  }
  """
  * def schema =
  """
  {
    "?c": ##(schema_optional),
    "?d": ##(schema_optional),
    "?e": ##(schema_optional)
  }
  """
  * def result = 
  """
  {
    "d": {
      "a": "hi",
      "b": 19
    }
  }
  """
  * match result == schema

这种方式适合精确控制单个键的可选性,比如混合必填键和可选键的场景。

方法二:使用contains only断言

如果你的需求是确保实际响应的所有键都在schema定义范围内(无额外键),且存在的键结构符合要求,可以用contains only替换==断言,无需修改原schema:

Scenario:
  * def schema_optional =
  """
  {
    "a": ##string,
    "b": ##number
  }
  """
  * def schema =
  """
  {
    "c": ##(schema_optional),
    "d": ##(schema_optional),
    "e": ##(schema_optional)
  }
  """
  * def result = 
  """
  {
    "d": {
      "a": "hi",
      "b": 19
    }
  }
  """
  * match result contains only schema

contains only会验证:实际对象的所有键都属于schema定义的键,且对应值的结构完全匹配,不强制要求schema的所有键都存在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 11:05:03