首页 > 解决方案 > 如何在 Jmeter 中操作 json 数据

问题描述

在 Jmeter 脚本中,我需要处理一个 http 响应并操作一个 json 以便在下一个请求中发送,因为实际上这种操作发生在 Angular 客户端中。

我的 Http 回复:

[
   {
      "function":"nameA",
      "rast":"F1",
      "tag":"EE",
      "probs":"0,987"
   },
   {
      "function":"nameB",
      "rast":"F2",
      "tag":"SE",
      "probs":"0,852"
   },
   {
      "function":"nameC",
      "rast":"F3",
      "tag":"CE",
      "probs":"0,754"
   }
]

我需要在下面的 json 中转换结果以在下一个请求中发布:

[
   {
      "function":"nameA",
      "rast":"F1",
      "type":{
         "name":"EE"
      },
      "id":"alpha"
   },
   {
      "function":"nameB",
      "rast":"F2",
      "type":{
         "name":"SE"
      },
      "id":"alpha"
   },
   {
      "function":"nameC",
      "rast":"F3",
      "type":{
         "name":"CE"
      },
      "id":"alpha"
   }
]

我使用这个 JSON 提取器过滤响应:

[*].["function", "rast", "tag"]

但现在我需要解决其他问题:

  1. 添加一个id属性(所有功能都相同)

  2. 添加具有名称类型的对象。

  3. 将标签属性移动到名为type.

  4. 将标签属性重命名为name.

标签: jsonjmeter

解决方案


  1. 添加JSR223 PostProcessor作为返回原始 JSON 的请求的子级
  2. 将以下代码放入“脚本”区域:

    def json = new groovy.json.JsonSlurper().parse(prev.getResponseData()).each { entry ->
        entry << [type: [name: entry.get('tag')]]
        entry.remove('tag')
        entry.remove('probs')
        entry.put('id', 'alpha')
    }
    def newJson = new groovy.json.JsonBuilder(json).toPrettyString()
    log.info(newJson)
    
  3. 就是这样,您应该在jmeter.log文件中看到生成的 JSON。

    JSR223 PostProcessor 处理 JSON

    如果您需要将它放在 JMeter 变量中,请将下一行添加到脚本的末尾:

    vars.put('newJson', newJson)
    

    并且您将能够根据需要访问生成的${newJson}

更多信息:


推荐阅读