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

Karate API数据库校验:匹配borrower对象中first_name失败求助

问题描述

我能成功读取单个字段并完成匹配校验:

* def query = "select first_name from uds.enrollment where email = '" + randomEmail + "'"
* def dbresponse = db.readValue(query)
* print dbresponse
* match dbresponse == (randomFirstName)

在同一张数据库表中,first_name存储在borrower对象字段内。我可以通过以下方式获取整个borrower对象:

* def query = "select borrower from uds.enrollment where email = '" + randomEmail + "'"
* def dbresponse = db.readValue(query)
* print dbresponse

但尝试执行匹配时报错:

* match dbresponse.first_name == (randomFirstName)

错误信息:

match failed: EQUALS
$ | actual path does not exist (STRING:STRING)
'#notpresent'
'Kerrie'
解决方案

核心原因

报错提示actual path does not exist,说明dbresponse本身没有first_name属性。大概率是数据库中borrower字段存储的是JSON字符串而非原生JSON类型,此时db.readValue返回的是字符串格式的JSON,而非可直接访问属性的对象。

解决步骤

  1. 先将返回的JSON字符串解析为可操作的对象,再进行匹配:
* def query = "select borrower from uds.enrollment where email = '" + randomEmail + "'"
* def dbresponse = db.readValue(query)
* def borrowerObj = karate.fromString(dbresponse) // 把JSON字符串解析为对象
* match borrowerObj.first_name == randomFirstName
  1. 先通过print dbresponse确认返回内容格式:
    • 如果输出是带引号的字符串(如"{\"first_name\":\"Kerrie\"}"),则必须执行上述解析步骤;
    • 如果输出是类似{first_name=Kerrie}的对象格式,需检查字段名拼写/大小写是否和数据库一致(不过你之前单独查询first_name能匹配,这种概率极低)。

另外,少数情况下数据库驱动会给JSON字段包裹一层顶级键(比如返回{"borrower": {"first_name": "Kerrie"}}),此时需改为match dbresponse.borrower.first_name == randomFirstName,可通过print输出确认结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 17:55:30