Karate使用jsonPath时如何获取字符串值而非数组类型结果
Karate框架中JsonPath提取单值的实现方案
带过滤条件的JsonPath表达式默认返回所有匹配结果组成的数组,这是JsonPath的标准规范行为,即使仅匹配到1条结果也不会自动转换为单值。要直接获取字符串类型的home号码,可选择以下任意一种实现方式:
- 数组下标直接取值
确认过滤结果仅存在1条匹配项时,直接在表达式末尾追加[0]下标读取第一个元素即可:
执行后* def homePhone = response.phoneNumbers[?(@.type == 'home')].number[0]homePhone即为字符串类型的0123-4567-8910,可直接作为查询参数传入后续接口请求。 - 使用Karate内置get关键字
Karate原生提供的get语法会对单匹配结果自动做拆包转换,无需手动写下标,写法更简洁:
该写法会自动校验匹配结果数量:如果匹配到0条或多条数据,会直接抛出执行错误,适合明确业务规则下仅会存在1条匹配数据的场景,能自动拦截不符合预期的响应数据。* def homePhone = get response.phoneNumbers[?(@.type == 'home')].number - 先定位对象再读取属性
可以先通过过滤拿到目标数组元素对象,再单独读取对象的number属性,逻辑拆分更清晰:* def homePhoneObj = response.phoneNumbers[?(@.type == 'home')][0] * def homePhone = homePhoneObj.number
补充提示:如果业务场景下可能存在多条type为home的号码记录,直接取下标[0]的写法只会返回第一条匹配结果,不会提示数据异常;如果需要强制校验匹配结果唯一性,优先选择get关键字的写法。
内容的提问来源于stack exchange,提问作者Smith Regan
相关产品推荐
相关产品推荐

