jmeter脚本部分怎么把“[{“1”:123},]{“1”:123}”这种类型转换成列表嵌套字典的形式

在 JMeter 的脚本/JSR223 里,你遇到的这种字符串本质上是**“看起来像数组/对象的文本”**,要先把它变成真正的结构(List + Dict)。不过你这个例子:

[{“1”:123},]{“1”:123}

有两个明显问题会导致不能直接用 JSON 解析

  1. 使用了全角符号:{ } , 和中文冒号 、中文引号 “ ”
  2. 结构不像标准 JSON(标准 JSON 应该是 [{ "1":123 }, { "1":123 }] 这种)

下面给你两种可落地做法:


方案 A:先“归一化”为标准 JSON,再用 JSON.parse

适合:字符串格式基本稳定,只是全角/中文符号导致无法直接解析。

1)示例:把它转成标准 JSON

目标:把

  • {
  • }
  • ,
  • "
  • "
  • :

再把结构问题修成合法 JSON(你这个例子似乎少了一个数组元素的 ] 位置/逗号位置)。
如果你的真实数据总是类似“一个数组 + 另一个对象混在后面”,通常要按业务规则拼成数组。

JSR223(Groovy)示例

假设原始字符串在变量 raw

import groovy.json.JsonSlurper

def raw = vars.get("raw")

// 全角/中文符号归一化
def s = raw
        .replaceAll("{", "{")
        .replaceAll("}", "}")
        .replaceAll(",", ",")
        .replaceAll("“", "\"")
        .replaceAll("”", "\"")
        .replaceAll(":", ":")
        
// 这里需要根据你实际的“非标准拼接情况”修正结构。
// 你给的样例像: [ { "1":123 }, ] { "1":123 }
// 典型修法:把多余的 "] { ... }" 改成 " , { ... }"
s = s.replaceAll("\\]\\s*\\{", ",{")

// 以及修掉数组里的末尾多余逗号:"{...},]" => "{...}]"
s = s.replaceAll(",\\s*\\]", "]")

def parsed = new JsonSlurper().parseText(s)

// parsed 就是 List 或 Map,取决于最终 s 是否是标准 JSON 数组/对象
// 如果你想强制变成“列表嵌套字典”
def resultList = (parsed instanceof List) ? parsed : [parsed]

vars.put("result", groovy.json.JsonOutput.toJson(resultList))
log.info("resultList = ${resultList}")

方案 B:不依赖 JSON,直接用正则提取键值对再组装

适合:字符串结构千奇百怪、很难保证能拼成合法 JSON。

例如你这种总是形如 { "1": 123 } 反复出现,那么可以提取所有 {...} 里的键值对。

JSR223(Groovy)示例(提取所有对象里的 "key": value"

def raw = vars.get("raw")

def s = raw
        .replaceAll("{", "{")
        .replaceAll("}", "}")
        .replaceAll(",", ",")
        .replaceAll("“", "\"")
        .replaceAll("”", "\"")
        .replaceAll(":", ":")

// 提取所有 { ... } 片段
def matcher = (s =~ /\\{([^}]*)\\}/)
def list = []

matcher.each { m ->
    def objText = "{" + m[1] + "}"
    def obj = new groovy.json.JsonSlurper().parseText(objText) // 单个对象一般较稳定
    list << obj
}

vars.put("result", groovy.json.JsonOutput.toJson(list))
log.info("list = ${list}")

你需要我确认的一点(不然“方案A里怎么修结构”会不准)

请你补充任意一个真实样例(尽量包含完整内容、不要省略),并告诉我:

  1. 你希望最终结果一定是 List<Map> 吗?还是有时是 Map
  2. 这类字符串是否总是“[ {..},] {..} 这种拼接错误”模式?还是可能是别的组合?

你把实际 raw 字符串贴一条出来,我可以把上面“结构修正那行 replaceAll”给你改成完全匹配你数据的版本。