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

如何使用Karate遍历JSON数组并校验每个对象的键长度

在Karate中遍历JSON数组校验每个对象的键数量

你的问题出在karate.keysOf()的使用场景上:它仅对单个JSON对象生效,而你传入的res是整个products数组,对数组调用自然返回null。要校验数组中每个对象的键数量,需要遍历数组并对每个对象单独处理,以下是两种可行方案:

方案1:用match each直接断言(推荐)

这是Karate中最简洁的断言方式,直接对数组中每个元素做校验:

# 假设接口返回的JSON已存在于response变量中
* match each response.products == '#(karate.sizeOf(karate.keysOf(_)) == 2)'

如果需要同时校验键的名称和类型,也可以更明确地写:

* match each response.products == { code: '#string', name: '#string' }

这种写法既校验了键的数量,也确保了键名和值的类型符合预期。

方案2:用karate.forEach手动遍历校验

如果需要在遍历过程中做额外操作(比如打印日志),可以用循环处理:

* def productsList = response.products
* karate.forEach(productsList, function(item) {
    # 获取当前对象的所有键
    * def itemKeys = karate.keysOf(item)
    # 断言键数量为2
    * assert karate.sizeOf(itemKeys) == 2
    # 可选:打印当前对象的键信息
    * print "当前对象的键:", itemKeys, ",数量:", karate.sizeOf(itemKeys)
  })

补充说明

  • 你之前用的get $..products.[*]可以简化为直接引用response.products(如果是接口返回的响应),无需额外的get操作。
  • karate.sizeOf()对数组返回的是数组长度,对键集合返回的是键的数量,这是它的正常行为,你之前的用法是传入了数组,所以得到的是数组总长度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 20:42:34