使用 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,因此您需要:
- 删除第一个和最后一个
"
通过即 substring 函数
- 通过 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
我是 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,因此您需要:
- 删除第一个和最后一个
"
通过即 substring 函数 - 通过 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