如何在Karate Feature中以标准JSON格式打印JS函数返回的结果数据
如何在Karate Feature中以标准JSON格式打印JS函数返回的结果数据
我明白你遇到的问题了——直接打印JS函数返回的对象时,只会显示[object Object],看不到实际的JSON结构对吧?别担心,有几种简单的方法可以解决这个问题,让你轻松看到格式化后的完整JSON数据:
方法一:使用JSON.stringify()序列化对象
你可以在打印时用JSON.stringify()把对象转换成标准JSON字符串,还能通过添加缩进参数让输出更美观。修改你最后的打印步骤即可:
And print "result: " + JSON.stringify(result, null, 2)
这里的null是用于过滤结果的参数(我们不需要过滤就传null),2是缩进空格数,这样输出的JSON会自动换行并缩进,可读性很强。
你也可以在JS函数内部的print语句里直接用这个方式,比如把函数里的打印改成:
print("json: " , JSON.stringify(jsonData, null, 2));
方法二:利用Karate内置的karate.pretty()工具函数
Karate本身提供了专门美化JSON输出的工具函数karate.pretty(),用它会更简洁,不需要手动处理JSON.stringify的参数:
And print karate.pretty(result)
这个方法会自动把对象格式化成带缩进的JSON字符串,直接打印出清晰的结构。
为什么原来的打印会显示[object Object]?
当你尝试把一个JS对象和字符串拼接(比如"result " + result)时,JS会自动调用对象的toString()方法,而默认情况下对象的toString()就会返回[object Object],这就是你看不到实际数据的原因。只有显式地把对象序列化为JSON字符串,才能看到完整的结构。
下面是修改后的完整Feature代码示例,你可以参考:
* def doWork = """ function(jsonData) { print("json: " , JSON.stringify(jsonData, null, 2)); jsonData.programmingLanguage = 'Java' jsonData.framework = 'Karate' jsonData.array = [1,2,3,4] print("json: " , JSON.stringify(jsonData, null, 2)); return jsonData } """ * def jsonRequest = {name: "Karate Test", topic: "API Testing"} * def result = doWork(jsonRequest) And print "result: " + JSON.stringify(result, null, 2)
备注:内容来源于stack exchange,提问作者Shreyansh Jain
相关产品推荐
相关产品推荐

