如何在Karate中遍历嵌套对象数组并按datevalue排序?
Karate实现嵌套JSON数组的排序需求
完全可以通过Karate实现这个嵌套结构的排序需求,核心是利用Karate内置的JavaScript函数能力,提取排序依据后对数组进行排序。以下是具体实现方案:
明确排序规则
首先需要确定排序的核心依据:比如按每个infolist项的marketList中最早的datevalue升序排列,或是按最晚的datevalue排序。下面以「按最早datevalue升序」为例给出实现代码,你可以根据需求调整逻辑。
实现代码示例
假设接口返回的响应已存储在response变量中:
// 定义函数:提取某一infolist项的最早datevalue * def getEarliestDate = function(item) { // 提取当前项所有marketList的datevalue var dates = item.marketList.map(function(m) { return m.datevalue; }); // 对日期字符串排序(YYYY-MM-DD格式可直接按字典序比较),取第一个即最早日期 return dates.sort()[0]; } // 对infolist数组按最早datevalue升序排序 * def sortedInfoList = response.infolist.sort(function(a, b) { var dateA = getEarliestDate(a); var dateB = getEarliestDate(b); // 字符串日期比较,localeCompare返回-1/0/1,符合sort函数的要求 return dateA.localeCompare(dateB); }) // 将排序后的数组替换原响应中的infolist * response.infolist = sortedInfoList
调整排序逻辑
- 如果需要按最晚的datevalue排序,只需修改
getEarliestDate函数,将dates.sort()[0]改为dates.sort().reverse()[0]即可。 - 如果要按降序排列,只需将
dateA.localeCompare(dateB)改为dateB.localeCompare(dateA)。
验证结果
针对你提供的示例数据,排序后infolist数组会先出现id=2的项(其最早datevalue为2018-03-01),再出现id=1的项(最早datevalue为2020-03-01),符合预期。
内容的提问来源于stack exchange,提问作者Tripti Paliwal
相关产品推荐
相关产品推荐

