JMeter 实战技巧:JSON 数组筛选指定对象并剔除首尾大括号

一、业务场景

日常做接口自动化、性能测试时,经常遇到接口返回JSON 数组格式数据,数组内包含多条不同业务数据。实际业务需求:

  1. 根据指定字段筛选出数组里单条目标 JSON 对象
  2. 提取后自动去掉对象首尾 {},只保留内部所有键值对,直接拼接至下一个接口请求体使用。

本次实战接口为外部模块指标列表查询接口 ,返回多条指标数据,我们需要筛选出 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

五、避坑注意点

  1. 数值类型判断不需要加双引号,字符串字段匹配必须加双引号;
  2. JSON 过滤表达式仅 JMeter 内置 JSONPath 引擎支持,写法严格区分大小写;
  3. 若无匹配数据,提取值为空,可搭配 JSON 断言提前做数据校验;
  4. 去除大括号只适合单条 JSON 对象,数组格式不建议使用此截取方式。

六、总结

在接口联动自动化测试中,数组筛选 + 去除外层括号是非常高频的用法。先用JSON提取器通过条件表达式精准定位业务数据,再借助BeanShell字符串截取剔除多余符号,两步即可实现干净可用的接口参数,适配财务系统、业务审批、指标查询等绝大多数企业级接口测试场景。

相关推荐
霸道流氓气质3 小时前
Spring AI 结构化输出 Agent 实战:让大模型返回精准 JSON
人工智能·spring·json
查拉图斯特拉面条5 小时前
JMeter 实战:JSON 响应中文节点 + 数值精准断言(附真实接口案例)
jmeter·json
Rooting++1 天前
package.json三种依赖的区别
vue.js·json
曹牧1 天前
C#:DataGridView控件中展示JSON内容
开发语言·c#·json
howard20052 天前
4.4 Spark SQL数据源 - JSON
json·spark sql数据源
灰子学技术2 天前
Envoy gRPC-JSON 转码器功能实现分析
json
夜雪闻竹2 天前
Cursor 的 state.vscdb 解析踩坑记
json·aigc·ai编程
qq_4924484462 天前
Jmeter Transaction Controller(事务控制器) 的 TPS(每秒事务数)严格固定为 1
java·开发语言·jmeter
水煮白菜王2 天前
JSONEditor 使用指南
前端·javascript·chrome·json