You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JMeter中列表含特殊字符致JSON Schema验证失败求助

解决方案:JMeter构造含特殊字符的JSON数组负载报错问题

问题根源

  1. BeanShell PreProcessor生成的ArrayList直接调用toString()得到的是Java风格数组(如[带&的元素, 带空格的元素]),未对特殊字符做JSON转义,导致实际请求的JSON结构破坏。
  2. 服务端JSON Schema验证时,因非法JSON格式误判为“数组值不符合要求”(实际是JSON解析失败后结构异常)。

修复步骤

1. 替换BeanShell为JSR223 PreProcessor(Groovy脚本)

Groovy自带JSON安全转义能力,且性能远优于BeanShell,是JMeter官方推荐的脚本语言。

生成含特殊字符的字符串数组(适用于服务端期望字符串数组的场景)

// 读取groups CSV并生成标准JSON数组
def csvPath = "sampleGroups.csv" // 替换为你的CSV实际路径
def groupsList = []
new File(csvPath).eachLine { line ->
    // 转义JSON特殊字符:双引号、反斜杠、换行等
    def escapedStr = line.replaceAll(/\\/, "\\\\\\\\").replaceAll(/"/, "\\\\\"")
    groupsList.add("\"${escapedStr}\"") // 为元素添加JSON字符串引号
}
// 将数组转为标准JSON格式,存入JMeter变量
vars.put("groups", "[" + groupsList.join(",") + "]")

// tags数组同理(如果需要保留原逻辑)
def tagsPath = "sampleTags.csv"
def tagsList = []
new File(tagsPath).eachLine { line ->
    def escapedStr = line.replaceAll(/\\/, "\\\\\\\\").replaceAll(/"/, "\\\\\"")
    tagsList.add("\"${escapedStr}\"")
}
vars.put("tags", "[" + tagsList.join(",") + "]")

生成对象数组(适用于服务端期望对象数组的场景,比如每个group是{"name": "xxx"})

如果服务端Schema要求included.groups是对象数组而非字符串数组,调整脚本如下(假设CSV每行是单个字段值,对应对象的name属性):

def csvPath = "sampleGroups.csv"
def groupsList = []
new File(csvPath).eachLine { line ->
    def escapedName = line.replaceAll(/\\/, "\\\\\\\\").replaceAll(/"/, "\\\\\"")
    groupsList.add("{\"name\":\"${escapedName}\"}")
}
vars.put("groups", "[" + groupsList.join(",") + "]")

2. 保持HTTP请求负载不变

原负载的变量引用逻辑无需修改:

{
  "included": {
    "groups": ${groups},
    "tags": ${tags}
  }
}

3. 验证请求格式

运行测试后,查看查看结果树中的请求内容,确认groups数组是标准JSON格式,比如:

{
  "included": {
    "groups": ["group&name", "group/with/slash", "group with space"],
    "tags": ["tag1", "tag2"]
  }
}

关键注意事项

  • 必须确保HTTP请求的Content-Type头设置为application/json,否则服务端可能无法正确解析负载。
  • 保留原始CSV数据的前提下,Groovy脚本的转义逻辑会自动处理所有JSON特殊字符,无需手动修改CSV内容。

内容的提问来源于stack exchange,提问作者GorkhaliHero

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 04:15:36