首页 > 解决方案 > JsonSlurper 的格式化问题

问题描述

我有以下 JSON 响应。

{
  "data": {
    "statusCode": 200,
    "success": true,
    "technicalSettings": [
      {
        "name": "Abcd Advanced",
        "humanoid": "adult",            
        "uid": "1da67bdc-0173-1000-0000-53f11ba5a31e",
        "technicalSettingsUID": "1dae2bdc-0173-1000-0000-53uj91ba5a31e",
        "checksum": "101a1ddf3f59c4e666dadc9677bf998c78216e8e8d79882e8b0d19ddb77e",
        "protocolNumber": "",
        "modifiedDate": "Tue, 21 Jul 2020 04:06:03 GMT",        
        "version": 1,
        "protocolUID": "df26c1fc-328e-43b6-b285-e0671267dae1",
        "dependencies": [
          "rawprotocols/1dae2bdc-0173-1000-0000-53f11ba5a31e.zip"
        ],
        "deviationChecksum": {
          "subsectionChecksum": [
            
          ],
          "aggregatedDeviationChecksum": "101a1ddf3f59c4e6bgtydc9bdad55abf998c78216e8e8d79882e8b0d19ddb77e"
        },
        "protocolmetadata": {
          "MRSessionData": {
            "entry": "Feet First",
            "fieldstrength": "30000",
            "gradcoil": "11",
            "position": "Supine",
            "MR_VERSION": "DV26.0#2",
            "autostart": "0",
            "srrating": "120",
            "tabentry": "None"
          }
        },
        "clinicalInstructions": [
          
        ],
        "population": "adult"
      }
    ],
    "library": {
      "vsion": 5,
      "dmVersion": 3
    }
  },
  "success": true,
  "statusCode": 200,
  "error": ""
}

我正在使用 JSON 提取器来获取 data.technicalSettings 的值。

在此处输入图像描述

现在,当我将变量 pPublishTechSettings 中的值与 JsonSlurper 一起使用时,即使我得到了所有值,字符串 strPublishTechSettings 中值的顺序也不同。如何以与原始响应 JSON 中相同的顺序获取值?

这是我的代码。

def technicalSettings = new groovy.json.JsonSlurper().parseText(vars.get('pPublishTechSettings_ALL'))

technicalSettings.eachWithIndex { setting, index ->  

  strPublishTechSettings =   new groovy.json.JsonBuilder(setting).toString()  

  log.info('Values' + ': ' + strPublishTechSettings )
         
}

标签: jsonjmeter

解决方案


鉴于您使用的是 JSON Extractor,您对提取元素的顺序没有任何保证,它发生在JsonPath 库的引擎盖下

鉴于您使用的是 Groovy,您可以摆脱这个 JSON Extractor 位并将所有内容移至JSR223 PostProcessor

def technicalSettings = new groovy.json.JsonSlurper().parse(prev.getResponseData()).data.technicalSettings

technicalSettings.eachWithIndex { setting, index ->
    strPublishTechSettings =   new groovy.json.JsonBuilder(setting).toString()
}

更多信息:


推荐阅读