一、业务场景
日常做接口自动化、性能测试时,经常遇到接口返回JSON 数组格式数据,数组内包含多条不同业务数据。实际业务需求:
- 根据指定字段筛选出数组里单条目标 JSON 对象;
- 提取后自动去掉对象首尾
{},只保留内部所有键值对,直接拼接至下一个接口请求体使用。
本次实战接口为外部模块指标列表查询接口 ,返回多条指标数据,我们需要筛选出 ZBID=3 的数据,并且去除外层大括号。
二、接口完整 JSON 返回示例
json
{
"status": 200,
"msg": "外部模块使用的指标列表成功",
"msgDetails": "",
"data": [
{
"FZ11DM": "",
"JE_ZSY": 22.33,
"BMDM": "001",
"JE_ZFYE": 1000.00,
"ZBID": 1
},
{
"FZ11DM": "",
"JE_ZSY": 3200.00,
"BMDM": "001",
"JE_ZFYE": 10000.00,
"ZBID": 2
},
{
"FZ11DM": "",
"FZRDM": "",
"JE_ZSY": 0.00,
"FZ30DM": "",
"JE_NCYSY": 0.00,
"BMDM": "001",
"JE_ZFYE": 1000.00,
"YSFADM": "01",
"YSLX": "1",
"WHMC": "",
"JE_TZD_TJ": 0.00,
"FZ27MC": "",
"JE_ED": 0.00,
"YSDWMC": "",
"FZ23MC": "",
"JFLXDM": "",
"JSFSMC": "",
"BMFZR": "",
"XMDM": "",
"ZBZTMC": "已批复",
"JFLXMC": "",
"FZ27DM": "",
"PFR": "指标1",
"JE_TJD_TR": 0.00,
"FZ23DM": "",
"ZYDM": "",
"JSFSDM": "",
"FZ9DM": "",
"JE_YE_SHOW": "1,000.00",
"EDWZC": "1",
"SFCZZB": "0",
"JE_ZJE": 1000.00,
"JE_ZJE_CHILD": 0.00,
"JE_USE_JE": 0.00,
"FZ16MC": "",
"WHDM": "",
"FZADM": "",
"JE_SYJE_SHOW": "0.00",
"ISSECRET": "0",
"FZ12MC": "",
"JE_TJD_TC": 0.00,
"JE_TZ": 0.00,
"JE_DJ": 0.00,
"YSFAMC": "方案01",
"FZ16DM": "",
"BMMC": "部门001",
"ZYMC": "",
"FZ9MC": "",
"JE_TZD_TZ": 0.00,
"ZBTYPE": "指标",
"FZ12DM": "",
"EXECJE_RATE": 0.00,
"GNKMDM": "",
"KTZJE": 0.00,
"FZAMC": "",
"JE_ZJE_SHOW": "1,000.00",
"GNKMMC": "",
"BM": "001 部门001",
"ZBZT": "2",
"CYSKZFS": "0",
"KDJJE": 1000.00,
"FZ28MC": "",
"ZBLYMC": "年初预算",
"EXEC_RATE": 0.00,
"FZ24MC": "",
"YSYED": 0,
"GSDM": "202306281001",
"FZ20MC": "",
"BZ": "",
"FZ28DM": "",
"FZ24DM": "",
"XMMC": "",
"FZ20DM": "",
"LRRQ": "20260519",
"BZDM|BZMC": "",
"FZ8DM": "",
"ZBID": 3,
"FZ17MC": "",
"IDZBBH": "a506a2ff473842ec8a66011e82f7c2c6",
"JE_YJD": 0.00,
"FZ13MC": "",
"SHRQ": "20260519",
"ZSYZB": 0.00,
"KJND": "2026",
"YSFA": "01 方案01",
"FZ17DM": "",
"FZ8MC": "",
"LRSJ": "12:56:21",
"FZ13DM": "",
"XFZT": "0",
"KJDJE": 0.00,
"LRR": "指标1",
"JE_JD": 0.00,
"JE_ZT": 0.00,
"FZ29MC": "",
"PFRQ": "20260519",
"FZ25MC": "",
"JE_KZYE": 1000.00,
"FZ21MC": "",
"ZBDM": "201",
"ZJXZMC": "",
"ISPUBLICZB": "0",
"FZ29DM": "",
"YSFADM|YSFAMC": "01 方案01",
"ZBLY": "02 年初预算",
"SHR": "指标1",
"JE_KYSQED": "",
"FZ25DM": "",
"FZ21DM": "",
"JE_YE": 1000.00,
"ZBLYDM": "02",
"JE_YDJ": 0.00,
"JE_QC": 1000.00,
"FZ7DM": "",
"JE_SQED": "",
"JE_DJ_JD": 0.00,
"FZ18MC": "",
"MODULE": "全部",
"FZ14MC": "",
"JE_HK": 0.00,
"KTJJE": 1000.00,
"ZBLB": "MXZB",
"FZ18DM": "",
"JE_HS": 0.00,
"FZ7MC": "",
"FZ14DM": "",
"PFRID": 27,
"ZFFSMC": "",
"JE_TZ_TJ": 0.00,
"SJZBID": 0,
"JJKMMC": "",
"STARTDATE": "20260101",
"YJBFB": 100.00,
"SFJZ": "0",
"ZTEXEC_RATE": 0.00,
"JE_TJ": 0.00,
"SHRID": 27,
"JE_ED_BL": 0.00,
"ZJLYDM": "",
"XMFLDM": "",
"ABSTRACT": "其他薪资201",
"ZFFSDM": "",
"JE_SR": 0.00,
"FZ26MC": "",
"JE_SQ": 0.00,
"FZ22MC": "",
"JJKMDM": "",
"BMDM|BMMC": "001 部门001",
"SQJZRQ": "",
"ZBLYDM|ZBLYMC": "02 年初预算",
"ZJLYMC": "",
"XMFLMC": "",
"FZ26DM": "",
"FZ22DM": "",
"YSDWDM": "",
"JE_JZ": 0.00,
"ISINDEPARTMENT": "1",
"ZJXZDM": "",
"FZ19MC": "",
"FZ6DM": "",
"ENDDATE": "20261231",
"FZ15MC": "",
"JE_ZX": 0.00,
"LRRID": 27,
"FZ11MC": "",
"BYGKZ": "0",
"JE_JK": 0.00,
"FZ30MC": "",
"FZ19DM": "",
"FZ6MC": "",
"FZ15DM": ""
}
]
}
需求:精准拿到 ZBID=3 整条数据,并且去掉最外层大括号。
三、实现步骤
1. 添加 JSON 提取器筛选目标数据
在当前 HTTP 请求下,右键添加 后置处理器 → JSON 提取器
- 引用名称:
mxzbList - JSON Path 表达式:
plaintext
$.data[?(@.ZBID==3)]
- 匹配数字:
1 - 其余默认即可
表达式释义
$:JSON 根节点data:返回值数组字段[?(@.ZBID==3)]:过滤语法,匹配数组内 ZBID 等于 3 的对象
此时提取出来的数据格式:
json
{"FZ11DM":"",...省略所有字段...,"FZ15DM":""}
自带首尾 {},无法直接拼接 JSON 请求体。
2. 添加 BeanShell 后置处理器去除大括号
继续同请求下添加 BeanShell 后置处理器,写入以下代码:
java
运行
String res = vars.get("mxzbList");
if(res != null){
// 去掉开头 { 和结尾 }
res = res.substring(1, res.length()-1);
vars.put("finalmxzbList",res);
}
3. 最终调用变量
直接使用变量:
plaintext
${noBracketData}
输出效果:纯键值对内容,无任何外层大括号,可直接放入 JSON 请求体拼接使用。
四、常用筛选 JSONPath 表达式汇总
// 按ZBID筛选
$.data[?(@.ZBID==3)]
// 按名称筛选
$.data[?(@.ABSTRACT=="其他薪资201")]
// 多条件筛选
$.data[?(@.ZBID==3 && @.BMDM=="001")]
//提取筛选后对象内单个字段
$.data[?(@.ZBID==3)].JE_ZFYE
五、避坑注意点
- 数值类型判断不需要加双引号,字符串字段匹配必须加双引号;
- JSON 过滤表达式仅 JMeter 内置 JSONPath 引擎支持,写法严格区分大小写;
- 若无匹配数据,提取值为空,可搭配 JSON 断言提前做数据校验;
- 去除大括号只适合单条 JSON 对象,数组格式不建议使用此截取方式。
六、总结
在接口联动自动化测试中,数组筛选 + 去除外层括号是非常高频的用法。先用JSON提取器通过条件表达式精准定位业务数据,再借助BeanShell字符串截取剔除多余符号,两步即可实现干净可用的接口参数,适配财务系统、业务审批、指标查询等绝大多数企业级接口测试场景。