Karate框架中使用print关键字直接输出JsonPath表达式结果报错
问题原因
Karate的print语句默认直接执行JavaScript语法,而[*]是JsonPath特有的通配符语法,JavaScript本身不识别这种数组遍历写法,因此直接在print中写jsonObject.store.book[*].author会触发语法错误。
对比来看:
jsonObject.store.book[1].author能正常运行,因为[1]是标准的JavaScript数组索引语法,符合JS规范;get关键字是Karate提供的专门用于解析JsonPath的指令,它会将后续的表达式当作JsonPath处理,而非普通JS代码,所以get jsonObject.store.book[*].author能正确解析。
解决方法
有三种可行的方式实现直接输出JsonPath结果:
1. 先通过get存储变量再打印(已验证可行)
这是你已经用到的方式,先将JsonPath结果存入变量,再打印变量:
* def allAuthors = get jsonObject.store.book[*].author * print allAuthors
2. 使用Karate内置的jsonPath()函数
直接在print中调用jsonPath()函数解析表达式,第一个参数是目标JSON对象,第二个参数是标准JsonPath字符串:
* print jsonPath(jsonObject, '$.store.book[*].author')
3. 使用Karate的字符串模板语法
用#()包裹JsonPath表达式,Karate会自动解析模板内的JsonPath并替换为结果:
* print '#(jsonObject.store.book[*].author)'
内容的提问来源于stack exchange,提问作者AMOD MAHAJAN
相关产品推荐
相关产品推荐

