Karate框架match断言报数据类型不匹配(OTHER:MAP)问题咨询
Karate框架数据库JSON字符串字段匹配类型不匹配解决方案
问题原因
db.readRow从数据库读取的address字段是转义后的JSON格式纯字符串,和脚本内定义的原生JSON对象类型不一致,直接执行match断言会触发类型不匹配报错- 之前尝试的类型转换逻辑本身有效,但额外访问
.value属性属于错误操作:普通JSON字符串通过json关键字转换后直接就是目标JSON对象,不存在.value属性,因此二次匹配仍然失败
正确实现代码
替换原有错误的转换、匹配逻辑即可:
Scenario: test error for stack overflow * def testAddress = db.readRow("select address from json_issue where person = 'Carole'") * def jsonAddressMatch = """ { "street":"123 Main Street", "city": "Queens", "state": "NY" } """ // 直接将JSON格式字符串转为Karate可识别的原生JSON对象 * json parsedAddress = testAddress.address * match parsedAddress == jsonAddressMatch
特殊场景兼容写法
如果部分数据库驱动返回的字符串存在额外转义、通过json关键字转换后仍识别为OTHER类型,可使用Karate内置的字符串转JSON方法强制解析:
* def parsedAddress = karate.fromString(testAddress.address) * match parsedAddress == jsonAddressMatch
注意:只有通过
Java.type引入的Java对象在Karate中做包装时才会出现.value属性,普通JSON字符串转换后无需访问该属性,直接使用转换后的变量即可完成匹配。
内容的提问来源于stack exchange,提问作者Carole Tierney
相关产品推荐
相关产品推荐

