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

Karate框架下如何比较两个JSON结构并返回键值比对结果

Karate框架下JSON全量结构与键值比对方案

你当前的代码只截取了匹配结果的pass布尔标识,丢弃了Karate内置match方法返回的完整差异信息,所以只能拿到是否匹配的结论,看不到具体校验结果。Karate原生的karate.match()本身就支持完整的JSON结构、字段类型、键值比对,不需要额外开发工具类,直接调整代码即可实现需求。

可直接运行的实现代码

// 执行两个JSON的全量匹配
def matchRes = karate.match(result1, result2)
// 组装最终返回结果,包含匹配状态和具体差异信息
def finalCompareResult = {
    isMatch: matchRes.pass,
    compareDetail: matchRes.pass ? "JSON结构、键值完全匹配" : matchRes.message
}
// 打印完整比对结果
print finalCompareResult

不同比对需求的适配方式

  • 仅校验结构、不校验具体键值:将作为比对基准的JSON中不需要校验值的字段替换为'#ignore'即可,例如基准值写为{userId: '#ignore', userName: '#ignore', orderList: '#ignore'},匹配时只会校验这些字段是否存在、层级结构是否一致,不会校验具体内容
  • 校验结构+值类型、不校验具体值:将对应字段替换为类型校验标记,支持的标记包括'#string'(字符串类型)、'#number'(数字类型)、'#boolean'(布尔类型)、'#array'(数组类型)、'#object'(对象类型),匹配时会自动校验字段存在且类型符合要求
  • 忽略部分指定字段的比对:直接在基准JSON中删除对应字段,或者给对应字段赋值'#ignore',该字段就不会纳入比对范围
  • 严格模式比对:如果要求两个JSON完全一致,不能多字段也不能少字段、值完全相等,直接传入两个原始JSON做match即可,不需要做任何标记处理

比对结果说明

  • 当两个JSON符合匹配规则时,isMatch字段为true,compareDetail会提示匹配成功
  • 当存在结构不匹配(缺字段、多余字段、层级结构错误、字段类型错误)或者键值不匹配时,isMatch字段为false,compareDetail会明确标注差异所在的字段路径、预期内容和实际内容,直接查看打印结果即可定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 22:48:21