当前位置: 首页 > news >正文

JMeter 实战:JSON 提取器结果双引号转义处理

在 JMeter 接口测试或数据处理场景中,我们常通过 JSON 提取器从响应结果中提取指定内容,但提取后的字符串若包含双引号("),在后续数据传输、入库或二次处理时,可能因格式问题引发解析异常。本文将详细讲解如何对 JSON 提取器提取的变量内容进行处理,为所有双引号前添加反斜杠(\),解决格式兼容问题。

一、需求场景

假设通过 JMeter 的 JSON 提取器提取内容后,变量名list对应的原始内容为:

plaintext

"currentCode":"","vouDay":null,"vouNo":null,"rowType":null,"sh":null,"rgCode":"","vouGuid":null,"qj":"2025年12月1日-2025年12月1日"

需要将其中所有双引号前添加反斜杠,最终得到如下格式:

plaintext

\"currentCode\":\"\",\"vouDay\":null,\"vouNo\":null,\"rowType\":null,\"sh\":null,\"rgCode\":\"\",\"vouGuid\":null,\"qj\":\"2025年12月1日-2025年12月1日\"

二、实现思路

JMeter 本身无直接的字符串转义内置函数,需借助JSR223 后置处理器(推荐 Groovy 语言)实现字符串替换:

  1. 获取 JSON 提取器生成的list变量值;
  2. 对变量值做判空处理,避免空值引发脚本异常;
  3. 利用字符串替换方法,将所有双引号(")替换为\"(需注意 Groovy 的转义规则);
  4. 将处理后的内容存入新变量(或覆盖原变量),供后续使用。

三、具体操作步骤

1. 添加 JSR223 后置处理器

在 JSON 提取器所在的 Sampler(如 HTTP 请求)下,依次右键选择:添加后置处理器JSR223后置处理器

2. 配置 JSR223 后置处理器

  • 语言选择:在处理器的 “Script Language” 下拉框中选择groovy(Groovy 性能优于 BeanShell,且语法更简洁);
  • 性能优化:勾选 “Cache compiled script if available”(缓存编译后的脚本,提升执行效率);
  • 编写脚本:在 “Script” 编辑区域粘贴以下代码:

groovy

// 1. 获取JSON提取器的原始变量值 def originalContent = vars.get("list"); // 2. 判空处理,避免空值导致异常 if (originalContent == null || originalContent.isEmpty()) { log.warn("变量list为空,未执行替换操作"); vars.put("list_escaped", ""); // 给空值设置默认值 } else { // 3. 核心替换:给所有双引号前添加反斜杠 // Groovy中反斜杠需要转义,所以用\\表示一个实际的\,"需要用\"转义 def escapedContent = originalContent.replaceAll("\"", "\\\\\""); // 4. 将处理后的内容存入新变量(也可以覆盖原变量list) vars.put("list_escaped", escapedContent); // 可选:打印日志,方便调试 log.info("原始内容:" + originalContent); log.info("处理后内容:" + escapedContent); }

3. 关键代码说明

  • vars.get("list"):JMeter 内置的vars对象用于获取 / 设置变量,此方法读取 JSON 提取器生成的list变量值;
  • 判空逻辑:避免list变量为空时,后续替换操作触发NullPointerException
  • replaceAll("\"", "\\\\\""):核心替换逻辑,Groovy 中反斜杠需双重转义,因此\\\\\"最终会解析为\",实现给所有双引号前加反斜杠的效果;
  • vars.put("list_escaped", escapedContent):将处理后的内容存入新变量list_escaped,也可直接写vars.put("list", escapedContent)覆盖原变量。

四、效果验证

运行 JMeter 脚本后,可通过以下方式验证结果:

  1. 查看日志:在 JMeter 的 “查看结果树” 中,切换到 “日志” 标签,可看到脚本打印的原始内容和处理后内容;
  2. 引用变量:在后续 Sampler(如 HTTP 请求、调试取样器)中引用${list_escaped},可直接使用转义后的内容;
  3. 调试取样器:添加 “调试取样器”,运行后在 “响应数据” 中可查看list_escaped变量的最终值。

五、注意事项

  1. 脚本编码:确保 JSR223 后置处理器的脚本编码为 UTF-8,避免中文内容转义后乱码;
  2. 变量覆盖:若无需保留原始list变量,可直接覆盖,但建议保留原始值便于问题排查;
  3. 特殊场景:若提取的内容包含其他需转义的字符(如换行符、制表符),可在脚本中补充对应的替换逻辑。

总结

通过 JSR223 后置处理器结合 Groovy 脚本,可快速实现 JMeter 中 JSON 提取器结果的双引号转义处理,解决因双引号格式问题导致的解析异常。该方法灵活通用,可适配各类字符串转义场景,是 JMeter 数据处理中常用的实战技巧。

http://www.jsqmd.com/news/167485/

相关文章:

  • 使用高相关关键词提升Miniconda技术文章搜索权重
  • PyTorch安装教程:使用Miniconda避免依赖地狱
  • 【课程设计/毕业设计】基于SpringBoot的高校校园网故障管理系统故障报修 - 派单处理 - 进度跟踪 - 总结分析【附源码、数据库、万字文档】
  • 结合‘pyenv linux’场景讲解Python版本管理最佳方案
  • VMware Workstation 12虚拟机软件实战指南
  • Miniconda创建环境时遇到‘ UnsatisfiableError’怎么办?
  • 使用清华镜像源加速Miniconda-Python3.10的包安装速度
  • 为大模型训练优化的Miniconda-Python3.10环境配置方案
  • 巴菲特对公司治理的重视与分析
  • 在LinkedIn发布英文版吸引海外开发者关注
  • Miniconda环境下运行Diffusion模型生成艺术图像
  • Java 基础语法
  • PHP 文件上传
  • JSP 连接数据库
  • 11 - 数据抽取 - lxml 解析库
  • 为什么你的‘pytorch安装’文章没流量?可能是关键词错了
  • macOS Xcode C++程序设置相对路径根目录
  • Miniconda-Python3.10镜像助力高校AI教学实验平台建设
  • 定期举办线上Workshop教学如何高效使用平台
  • SQL NOW() 函数详解
  • 深度学习基础(一)
  • Eclipse 内容辅助
  • 2,prometheus node_export及服务端配置文件
  • 收集用户反馈持续迭代内容质量和产品功能
  • MBZUAI和法国综合理工学院突破:让AI写作比人工快4倍的神奇算法
  • 12 - 数据抽取 - parsel解析库
  • 选择合适发布时间提升技术文章曝光量
  • 孩子近视增长快,有什么方法可以帮助孩子防控近视吗?
  • PyTorch基础【笔记向,本人学习中】
  • Lua 调试(Debug)