Jmeter如何基于指定数组匹配JSON路径并返回多个对应ID值
方案1:直接使用JSONPath批量匹配
如果你的JSONPath解析器支持in操作符(主流解析器如Jayway、JSONPath-Plus均支持),直接用以下路径即可一次性返回所有匹配的ID数组:$.payload[?(@.name in ['France', 'Switzerland', 'Croatia', 'Spain', 'Brondby', 'Sonderjyske', 'CFR Cluj', 'Ujpest FC', 'Young Boys' , 'Xamax', 'Bedford Town', 'Biggleswade Town'])].id
如果解析器不支持in操作,改用多条件或拼接即可:$.payload[?(@.name == 'France' || @.name == 'Switzerland' || @.name == 'Croatia' || @.name == 'Spain' || @.name == 'Brondby' || @.name == 'Sonderjyske' || @.name == 'CFR Cluj' || @.name == 'Ujpest FC' || @.name == 'Young Boys' || @.name == 'Xamax' || @.name == 'Bedford Town' || @.name == 'Biggleswade Town')].id
方案2:代码遍历提取(灵活性更高)
以JavaScript为例,先把目标名称存为数组,再对API返回的payload做过滤映射即可,还能额外统计未匹配到的名称:
// 待匹配的目标名称数组,提前统一去除两端空格避免匹配失败 const targetNames = ['France', 'Switzerland', 'Croatia', 'Spain', 'Brondby', 'Sonderjyske', 'CFR Cluj', 'Ujpest FC', 'Young Boys' , 'Xamax', 'Bedford Town', 'Biggleswade Town'].map(item => item.trim()) // API返回的JSON对象 const apiResult = {/* 此处填入你实际拿到的API返回内容 */} // 提取匹配到的ID const matchedIdList = apiResult.payload .filter(item => targetNames.includes(item.name.trim())) .map(item => item.id) // 可选:查找未匹配到的名称,方便排查缺失数据 const unmatchedNames = targetNames.filter(name => !apiResult.payload.some(item => item.name.trim() === name))
注意事项
你提供的目标数组中Young Boys后带有多余空格,匹配时建议统一对两端空格做trim处理,避免因格式问题导致匹配失败。
内容的提问来源于stack exchange,提问作者vlatko606

