Groovy断言JSON响应数组按字母排序失败,求解决办法
问题解决:断言JSON中Buckets按指定属性字母排序
错误原因
你遇到的No signature of method: java.lang.String.negative()错误,是因为代码里-it."foundPatientDisplayNaam"试图对字符串类型的foundPatientDisplayNaam执行负号操作——Groovy的负号运算符仅支持数值类型,字符串无法直接使用,因此报错。
修正方案
要断言buckets按foundPatientDisplayNaam的字母顺序排列,需使用Groovy的字符串比较逻辑,而非数值取负的方式。以下是修正后的代码:
断言升序排列
// 一次性解析响应内容,避免重复操作 def responseData = new groovy.json.JsonSlurper().parseText(messageExchange.responseContent).data // 将原数据转为JSON字符串 def originalJson = groovy.json.JsonOutput.toJson(responseData) // 对数据按指定属性升序排序后转JSON def sortedAscJson = groovy.json.JsonOutput.toJson(responseData.sort { it.foundPatientDisplayNaam }) // 断言原数据已按升序排列 assert sortedAscJson == originalJson
断言降序排列
如果需要断言是降序排列,使用Groovy的**太空船运算符<=>**实现反向比较:
def responseData = new groovy.json.JsonSlurper().parseText(messageExchange.responseContent).data def originalJson = groovy.json.JsonOutput.toJson(responseData) // 按指定属性降序排序 def sortedDescJson = groovy.json.JsonOutput.toJson(responseData.sort { a, b -> b.foundPatientDisplayNaam <=> a.foundPatientDisplayNaam }) assert sortedDescJson == originalJson
关键说明
sort { it.foundPatientDisplayNaam }:Groovy会自动对字符串执行自然字母顺序的升序排序。- 太空船运算符
<=>:返回两个值的比较结果(-1、0、1),通过交换a和b的位置实现降序。 - 避免重复解析JSON:将响应内容解析一次后复用,提升代码效率。
内容的提问来源于stack exchange,提问作者Philip Stuij
相关产品推荐
相关产品推荐

