使用 jsonSplurper.parseText(prev.getResponseDataAsString()) 后无法得到 属性

Cannot get property after using jsonSplurper.parseText(prev.getResponseDataAsString())

我是 Jmeter 的新手,我正在使用 JSR223 PostProcessor 在响应中获取一些属性。不幸的是,我的回复作为字符串 json 返回,如下所示:

"{\n "trueOdds": "1.9047619047619047",\n "displayOdds": "1.90",\n "minStake": 50.0,\n "maxStake": 105263,\n "selectionId": "11318855000001015h",\n "oddsStyle": "de",\n "offerId": "1911208285033005"\n}"

现在我想获取trueOdds, displayOdds 用于下一个请求。我尝试使用以下代码来获取它们:

import groovy.json.JsonSlurper

def jsonString = prev.getResponseDataAsString();

def jsonSlurper = new JsonSlurper();

def object = jsonSlurper.parseText(jsonString);

vars.put("trueOdds", object.trueOdds);

vars.put("displayOdds", object.displayOdds);

但我收到以下错误:

ERROR o.a.j.e.JSR223PostProcessor: Problem in JSR223 script, JSR223 PostProcessor javax.script.ScriptException: groovy.lang.MissingPropertyException: No such property: trueOdds for class: java.lang.String

谁能支持解决这个问题?非常感谢。

鉴于以下 JSON 负载,我无法重现您的问题:

{
  "trueOdds": "1.9047619047619047",
  "displayOdds": "1.90",
  "minStake": 50.0,
  "maxStake": 105263,
  "selectionId": "11318855000001015h",
  "oddsStyle": "de",
  "offerId": "1911208285033005"
}

演示:

如果您的回复看起来完全您向我们展示的方式,则它不是valid JSON,因此您需要:

  1. 删除第一个和最后一个 " 通过即 substring 函数
  2. 通过 replaceAll 函数删除所有出现的 \n

建议的代码修改:

import groovy.json.JsonSlurper

def jsonString = prev.getResponseDataAsString();

def withoutQuotationMarks = jsonString.substring(1, jsonString.length() - 1)
def withoutLineBreaks = withoutQuotationMarks.replaceAll('\\n','')

def jsonSlurper = new JsonSlurper();

def object = jsonSlurper.parseText(withoutLineBreaks);

vars.put("trueOdds", object.trueOdds);

vars.put("displayOdds", object.displayOdds);

有关 JMeter 中 Groovy 脚本的更多信息:Apache Groovy - Why and How You Should Use It