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

如何在Karate框架中匹配嵌套JSON对象的动态键?

在Karate中匹配含动态键的嵌套JSON响应

核心思路

Karate通过#string占位符处理动态键,只需定义每个动态键对应值的结构Schema,即可匹配所有符合该结构的键值对。

分步实现

  1. 定义机场层级的Schema
    先明确airports下每个动态键对应的对象结构:
* def airportSchema = {
    name: "#string",
    city_code: "#string",
    city_name: "#string",
    country_code: "#string",
    country_name: "#string",
    lat: "#number",
    lng: "#number",
    timezone: "#string",
    type: "#string"
}
  1. 定义城市层级的Schema
    接着定义data下每个动态键对应的城市对象结构,其中airports字段是含动态键的对象,每个值需符合上述airportSchema:
* def citySchema = {
    name: "#string",
    city_code: "#string",
    country_code: "#string",
    country_name: "#string",
    city_name: "#string",
    type: "#string",
    airports: { "#string": "#(airportSchema)" }
}
  1. 匹配整个data结构
    最后用{ "#string": "#(citySchema)" }匹配data下所有动态键对应的城市对象,确保每个键值对都符合结构:
* match flightAutocompleteDetails.response.data == { "#string": "#(citySchema)" }

替代写法(内联Schema)

如果不想拆分变量,也可以直接内联所有结构:

* match flightAutocompleteDetails.response.data == {
    "#string": {
        name: "#string",
        city_code: "#string",
        country_code: "#string",
        country_name: "#string",
        city_name: "#string",
        type: "#string",
        airports: {
            "#string": {
                name: "#string",
                city_code: "#string",
                city_name: "#string",
                country_code: "#string",
                country_name: "#string",
                lat: "#number",
                lng: "#number",
                timezone: "#string",
                type: "#string"
            }
        }
    }
}

对原有尝试的修正

  • 避免使用contains:contains仅检查存在性,无法确保所有动态键对应的对象都符合结构;若需严格校验,使用==更合适。
  • 变量引用无需加引号:原代码中'#(^response_data_airports)'的引号是多余的,直接写#(response_data_airports)即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 01:24:57