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

JMeter:如何修改Groovy代码为生成的JSON添加meta对象?

问题:在JMeter中用Groovy生成包含books数组和meta对象的JSON

此前通过Groovy在JMeter中动态生成JSON数组的方案效果良好,但现在需要在生成的JSON的books数组后添加一个meta对象,不清楚如何在toPrettyString格式化的结果中插入该对象。目标JSON示例如下:

{
 "books": [
        {
            "publisher": ${publisherName}, // 该变量在本次请求中所有项保持一致
            "ISBN": ${isbn_1},  // 以下三个字段来自三个不同的数组
            "Price": ${price_1},
            "Publisher": ${publisher_1},
            "Static Value that doesn't change": 100
       
        },
        {
            "publisher": ${publisherName}, // 该变量在本次请求中所有项保持一致
            "ISBN": ${isbn_2},  // 以下三个字段来自三个不同的数组
            "Price": ${price_2},
            "Publisher": ${publisher_2},
            "Static Value that will be the same for all items": 100
       
        }
    ],
    "meta": {
        "tag": {
            "searchNumber": ${searchNo}
        }
    }
}

此前使用的JSR223 Preprocessor代码如下:

def arraySize = vars.entrySet().findAll { entry -> entry.getKey().startsWith('isbn_') }.size()

def books = []

1.upto(arraySize, {index ->
    books.add([publisher:vars.get('publisherName'),
               ISBN: vars.get('isbn_' + index),
               Price: vars.get('price_' + index),
               Publisher:vars.get('publisher_' + index),
               "Static Value that doesn't change": 100
    ])
})

log.info(new groovy.json.JsonBuilder([books:books]).toPrettyString())

解决方案

直接在构建最外层JSON结构时,同时包含books和meta两个字段即可,JsonBuilder会自动处理整个结构的格式化,无需单独插入对象。修改后的完整代码如下:

def arraySize = vars.entrySet().findAll { entry -> entry.getKey().startsWith('isbn_') }.size()

def books = []

1.upto(arraySize, {index ->
    books.add([publisher:vars.get('publisherName'),
               ISBN: vars.get('isbn_' + index),
               Price: vars.get('price_' + index),
               Publisher:vars.get('publisher_' + index),
               "Static Value that doesn't change": 100
    ])
})

// 构建包含books数组和meta对象的完整JSON结构
def fullJson = new groovy.json.JsonBuilder([
    books: books,
    meta: [
        tag: [
            searchNumber: vars.get('searchNo')
        ]
    ]
]).toPrettyString()

log.info(fullJson)
// 如果需要将结果保存为JMeter变量供后续使用,可添加以下代码:
// vars.put('generatedJson', fullJson)

关键修改说明:

  • 在JsonBuilder的构造参数中,除了原有的books: books,新增meta字段,其值为嵌套的Map结构,对应目标JSON中的meta对象
  • 直接通过vars.get('searchNo')获取searchNumber对应的变量值
  • 如果需要将生成的完整JSON保存为JMeter变量,取消最后一行注释即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 02:32:45