多个值的JSON路径提取器

时间:2014-12-01 10:31:14

标签: json jmeter

我在jmeter中使用json路径提取器。但是,似乎每次提取器每次只能提取一个值。即名称: - 变量名,JSON路径: - $ .id

如果我需要拉出说id,从json命名并想要存储在两个不同的变量中,我可以使用单个json提取器。 就像是 名称: - id_value,name_value JSON路径: - $ .id,$ .name

json string

 {"id":"blah id", "name":"blah name"}

非常直接使用两个提取器来获取两个值。但是,它可以在一个提取器中使用吗?

3 个答案:

答案 0 :(得分:2)

如果您使用的是支持JSON Extractor的jmeter版本,则可以使用一个JSON Extractor后处理器提取多个值并将它们存储在多个变量中。

请注意,变量名,JSON路径表达式和默认值必须用分号分隔&#34 ;;"并且必须按照用户手册中的说明匹配彼此的数字(3个变量名称= 3个表达式和3个默认值)。

答案 1 :(得分:1)

对于JSON Path Extractor的当前版本1.2.0,它不受支持。

但是你可以使用Regular Expression Extractor完成它。

  1. 将正则表达式提取器添加为请求的子节点,该请求返回您的JSON字符串
  2. 按如下方式配置:
    • 参考名称:任何有意义的内容,即myVar
    • 正则表达式:{"id":"(.+?)", "name":"(.+?)"}
    • 模板:$1$$2$
  3. 要显示结果,您可以使用内置Regex Tester的View Results Tree侦听器。
  4. Regex Tester  4.其他选项与Debug Sampler结合使用以获取JMeter变量名称

    Debug Sampler

    所以你可以参考:

    • ID - ${myVar_g1}
    • 名称 - ${myVar_g2}

答案 2 :(得分:1)

这是一个老问题,但我正在努力解决这个问题,这是我的解决方案。在这里问的情况下

{"id":"blah id", "name":"blah name"}

您可以使用JSON Extractor Post-processor解决它。根据我的经验,我无法使用两个后处理器。 这是用于获取id和名称的后处理器:

enter image description here

在JSON Path表达式中编写:

$.["id", "name"]

然后testVar2将具有该值(来自debug sampler):

testVar2_1={"name":"blah name","id":"blah id"}
testVar2_matchNr=1

但是,我无法使用JSON Extractor后处理器来执行json响应,如:

{"id":"blah id", "other" : {"name":"blah name"}}

在这种情况下,我不得不使用带有这样的脚本的BeanShell PostProcessor:

import net.minidev.json.parser.JSONParser;
import net.minidev.json.JSONObject;
import net.minidev.json.JSONArray;

JSONParser p = new JSONParser(JSONParser.MODE_PERMISSIVE);

String jsonString = prev.getResponseDataAsString();
JSONObject jsonObj = (JSONObject) p.parse(jsonString);
String idString = (String) jsonObj.get("id");
JSONObject otherJSONObject = jsonObj.get("other");

String nameString = (String) otherJSONObject.get("name");

log.info("ID:" + idString);
log.info("NAME:" + nameString);

vars.put("IDVAR", idString);
vars.put("NAMEVAR", nameString);