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

如何在Karate API中按条件从响应提取值并存入变量

Karate 按条件提取JSON字段实现方案

你可以直接用Karate内置的JsonPath过滤或者原生JS风格的查找语法实现,不需要额外引入工具类,两种常用写法如下:

写法1:JsonPath 条件过滤(最通用)

Karate原生支持JsonPath语法,直接按属性过滤匹配的数组元素即可:

# 定义你要匹配的预期name值
* def expectName = "Sample2"
# 过滤results数组里name等于预期值的所有元素,返回匹配结果数组
* def matchedList = $response.results[?(@.name == expectName)]
# 如果业务上能确定name全局唯一,直接取第一个元素的目标字段存储为变量
* def targetId = matchedList[0].id
* def targetEmail = matchedList[0].email

# 可选:加校验避免匹配不到导致后续脚本草稿
* assert matchedList.length == 1, "未找到name字段匹配预期值的记录"

写法2:JS find 语法(适配复杂逻辑)

如果你需要写模糊匹配、多字段联合匹配这类复杂规则,直接用Karate支持的JS数组find方法即可,写法更灵活:

* def expectName = "Sample2"
# 查找第一个符合匹配条件的元素
* def matchedItem = response.results.find(item => item.name == expectName)
# 直接读取目标字段存为变量
* def targetId = matchedItem.id

常用扩展场景

  • 模糊匹配name:判断条件改成item.name.includes("Sample")即可匹配所有name包含Sample关键词的记录
  • 提取所有匹配项的指定字段:用filter替代find,比如response.results.filter(x => x.name.contains("Sample")).map(x => x.id)就能拿到所有匹配项的id列表
  • 多条件联合匹配:比如要同时匹配name和id,判断条件写x.name == "Sample2" && x.id == "U-456"即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 12:54:27