处理jsonpath后处理器结果

处理jsonpath后处理器结果,json,jmeter,jsonpath,Json,Jmeter,Jsonpath,我在Jmeter中运行了一个请求,其响应如下所示: { "Items":[ { "Available":3, "Info":[ { "Sample1":1, "Sample2":33, "Sample3":50, "Sample4":"asd", "Sample5":88, "Sample6":null,

我在Jmeter中运行了一个请求,其响应如下所示:

{
  "Items":[
    {  
      "Available":3,
      "Info":[  
        {      
          "Sample1":1,
          "Sample2":33,
          "Sample3":50,
          "Sample4":"asd",
          "Sample5":88,
          "Sample6":null,
          "Sample7":null,
          "Sample8":null,
          "Sample9":35,
          "Sample0":35
        }  
      ] 
    } 
  ] 
}
$.Items[?(@.Available > 0)].Info[0].Sample1[0];
$.Items[?(@.Available > 0)].Info[0].Sample2[0];
$.Items[?(@.Available > 0)].Info[0].Sample3[0]...
我的目标是浏览项目列表(在我的示例中只有一个,但可以有更多),如果“可用”大于0,则将“Info”中的一些值保存到变量中,以便在下一个请求中使用它们

现在,我的解决方案是添加JSON path后处理器,并在其中分离如下值:

{
  "Items":[
    {  
      "Available":3,
      "Info":[  
        {      
          "Sample1":1,
          "Sample2":33,
          "Sample3":50,
          "Sample4":"asd",
          "Sample5":88,
          "Sample6":null,
          "Sample7":null,
          "Sample8":null,
          "Sample9":35,
          "Sample0":35
        }  
      ] 
    } 
  ] 
}
$.Items[?(@.Available > 0)].Info[0].Sample1[0];
$.Items[?(@.Available > 0)].Info[0].Sample2[0];
$.Items[?(@.Available > 0)].Info[0].Sample3[0]...
但很明显,这不是一个很好的解决方案,我也认为如果我不得不多次这样做,这将占用太多的资源

所以我的问题是,是否有可能将

$.Items[?(@.Available > 0)].Info[0]

元素,然后对其进行处理以获取所需的字段?

我相信您可以在单个JSON路径查询中使用星号-
*
-表示通配符,如:

$.Items[?(@.Available > 0)].Info[0].*

参考资料:


    • 在我自己解决了这个问题之后,我完全忘记了这个问题。但是,如果有人在为同样的问题而挣扎,我现在就发布我的解决方案


      我确信有很多方法可以用JMeter解决这个问题,但是用正则表达式处理JSON对我来说太复杂了,而且我觉得这有点可笑,因为有很多很好的工具可以解决这个问题。因此,我使用GSON编写了一个小Java脚本,将其打包到一个.jar中,并将其添加到JMeter中。

      您想使用单一JSON路径提取器读取所有“Sample*”值吗?@Naveen不,只是其中的一些。@Naveen抱歉,我没有注意到您问题中的“single”一词,我使用多少JSON路径表达式来获取值对我来说并不重要,如果可能的话,我不想在每个表达式中都调用“IsAvailable大于0”复选框。