首页 > 解决方案 > 使用 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 以在下一个请求中使用。我尝试使用以下代码来获取它们:

导入 groovy.json.JsonSlurper

def jsonString = prev.getResponseDataAsString();

def jsonSlurper = 新的 JsonSlurper();

def object = jsonSlurper.parseText(jsonString);

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

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

但我收到以下错误:

错误 oajeJSR223PostProcessor:JSR223 脚本中的问题,JSR223 PostProcessor javax.script.ScriptException:groovy.lang.MissingPropertyException:没有这样的属性:类的 trueOdds:java.lang.String

任何人都可以支持解决这个问题吗?多谢。

标签: groovyjmeterjsr223

解决方案


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

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

演示:

在此处输入图像描述

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

  1. "通过即子字符串函数删除第一个和最后一个
  2. 删除所有出现的\nvia 即replaceAll函数

建议的代码修改:

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 - 为什么以及如何使用它


推荐阅读