我有一个JSON响应,如下所示
{
"queryStartDate": "20170523134739822",
"queryEndDate": "20170623134739822",
"Rows": [
{
"hasScdHistoryOnly": false,
"Values": [
"1",
"53265",
"CO"
]
},
{
"hasScdHistoryOnly": false,
"Values": [
"1",
"137382",
"CO"
]
},
{
"hasScdHistoryOnly": false,
"Values": [
"1",
"310824",
"CO"
]
}
]
}
我正在使用Jmeter的JSON Extractor后处理器来接收最后一个'Values'列表中的第二个值。即53265,137382,310824。
根据Stefan的介绍:http://goessner.net/articles/JsonPath/index.html#e2,我尝试使用$.Rows[*].Values[-2:-1]
和$.Rows[*].Values[(@.length-2)]
,但它们都不起作用。你能帮帮我吗?
答案 0 :(得分:2)
我相信JMeter正在使用JayWay JSON Path库,因此您应该寻找文档here。
一般情况下,我建议使用JSR223 PostProcessor作为JSON路径提取器的替代方法,两者都适用于基本方案,当涉及到高级查询和操作符时,它们的行为很不稳定。
将以下代码放入“脚本”区域
def values = com.jayway.jsonpath.JsonPath.parse(prev.getResponseDataAsString()).read('$..Values')
values.eachWithIndex { val, idx ->
vars.put('yourVar_' + (idx + 1), val.get(val.size()-2))
}
它应生成以下JMeter变量:
yourVar_1=53265
yourVar_2=137382
yourVar_3=310824
这似乎是你正在寻找的东西。
参考文献:
答案 1 :(得分:1)
使用View Results tree
的JSon Path Tester我可以看到用于提取值的以下表达式不正确(对于在线JSONPath Online Evaluator正确但不适用于JMeter)
二手表达式:$.Rows[*].Values[-2:-1]
JSon Path Tester的输出:No Match Found.
二手表达式:$.Rows[*].Values[(@.length-2)]
JSon Path Tester的输出:Exception: Could not parse token starting at position 16. Expected ?, ', 0-9, *
如果使用表达式$.Rows[*].Values[1]
,则会提取所需的回复。
二手表达式:$.Rows[*].Values[1]
JSon Path Tester的输出:
Result[0]=53265
Result[1]=137382
Result[2]=310824