Jmeter JSON提取器从列表的最后一项检索第二项

Jmeter JSON提取器从列表的最后一项检索第二项,json,jmeter,Json,Jmeter,我有一个JSON响应,如下所示 { "queryStartDate": "20170523134739822", "queryEndDate": "20170623134739822", "Rows": [ { "hasScdHistoryOnly": false, "Values": [ "1", "53265",

我有一个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提取器后处理器从“值”列表的最后一个接收第二个值。i、 e.53265、137382、310824


根据Stefan的介绍,我曾尝试使用
$行[*].Values[-2:-1]
$行[*].Values[(@.length-2)]
,但它们都不起作用。您能帮我一个忙吗?

使用
查看结果树的JSon路径测试仪,我可以看到您用于提取值的以下表达式不正确(适用于联机,但不适用于JMeter)

使用的表达式:
$。行[*]。值[-2:-1]

JSon路径测试仪的输出:
未找到匹配项。

使用的表达式:
$.Rows[*].Values[(@.length-2)]

JSon路径测试仪的输出:
异常:无法分析从位置16开始的令牌。应为?,',0-9,*

如果使用表达式
$.Rows[*].Values[1]
,它将提取所需的响应

使用的表达式:
$.Rows[*].Values[1]

JSon路径测试仪的输出:

 Result[0]=53265
 Result[1]=137382
 Result[2]=310824

使用
查看结果树
的JSon路径测试仪,我可以看到您用于提取值的以下表达式不正确(适用于联机,但不适用于JMeter)

使用的表达式:
$。行[*]。值[-2:-1]

JSon路径测试仪的输出:
未找到匹配项。

使用的表达式:
$.Rows[*].Values[(@.length-2)]

JSon路径测试仪的输出:
异常:无法分析从位置16开始的令牌。应为?,',0-9,*

如果使用表达式
$.Rows[*].Values[1]
,它将提取所需的响应

使用的表达式:
$.Rows[*].Values[1]

JSon路径测试仪的输出:

 Result[0]=53265
 Result[1]=137382
 Result[2]=310824

我认为JMeter使用的是JayWay JSON路径库,因此您应该查找文档


一般来说,我建议使用JSON路径提取器作为JSON路径提取器的替代方案,两者都只适用于基本场景,当涉及到高级查询和运算符时,它们的行为是不稳定的

  • 将JSR223后处理器添加为返回JSON以上的请求的子级
  • 确保在“语言”下拉列表中选择了“groovy”,并且勾选了“缓存已编译脚本(如果可用)”框
  • 将以下代码放入“脚本”区域

  • 它应生成以下JMeter变量:

    yourVar_1=53265
    yourVar_2=137382
    yourVar_3=310824
    
    这似乎是你在寻找的东西

  • 参考资料:


    我认为JMeter使用的是JayWay JSON路径库,因此您应该查找文档


    一般来说,我建议使用JSON路径提取器作为JSON路径提取器的替代方案,两者都只适用于基本场景,当涉及到高级查询和运算符时,它们的行为是不稳定的

  • 将JSR223后处理器添加为返回JSON以上的请求的子级
  • 确保在“语言”下拉列表中选择了“groovy”,并且勾选了“缓存已编译脚本(如果可用)”框
  • 将以下代码放入“脚本”区域

  • 它应生成以下JMeter变量:

    yourVar_1=53265
    yourVar_2=137382
    yourVar_3=310824
    
    这似乎是你在寻找的东西

  • 参考资料:


    谢谢Adnan,我目前正在使用此方法作为解决方法。我想知道在Jmeter的JSON提取器中,是否有一种方法可以从最后一项向后选择。在这种情况下,可以从第一个选项中选择forward。但是有一种情况是JSON没有标准化,但是需要向后选择。谢谢Adnan,我目前正在使用这种方法作为解决方法。我想知道在Jmeter的JSON提取器中,是否有一种方法可以从最后一项向后选择。在这种情况下,可以从第一个选项中选择forward。但有一种情况是JSON没有标准化,但需要向后选择。