使用 Jmeter JSON Extractor 从 JSON 的顶级数组中提取值

Extracting values from JSON with top level array using Jmeter JSON Extractor

在我的 JMeter 测试计划中,我有一个采样器,其中 returns 作者及其书籍的列表采用 JSON 格式。我只想获取所有作者的 ID。也就是说,在这种情况下,我应该在变量名中获取 [1,2,3],这样我就可以使用 ForEach 控制器启动另一个采样器以获取有关每个作者的详细信息。我知道我可以使用 JSON 提取器来获取它,但我没有获取我正在寻找的每个数据。

    [
     {
      "firstName": "William",
      "lastName":"Shakespeare",
      "Title": "Mr",
      "id": "1",
      "books": [
       {
        "id": "WS1",
        "title": "King John",
        "year":"1596"
       },
       {
        "id": "WS2",
        "title": "Julius Caesar",
        "year": "1599"
       },
       {
        "id": "WS3",
        "title": "Romeo and Juliet",
        "year": "1595"
       }
      ],
      "Nationality": "English"
     },
     {
      "firstName": "Sidney",
      "lastName":"Sheldon",
      "Title": "Mr",
      "id": "2",
      "books": [
       {
        "id": "SS1",
        "title": "The Naked Face",
        "year":"1969"
       },
       {
        "id": "SS2",
        "title": "A Stranger in the Mirror",
        "year": "1976"
       },
       {
        "id": "SS3",
        "title": "Bloodline",
        "year": "1977"
       }
      ],
      "Nationality": "American"
     },
     {
      
      "firstName": "Eiichiro",
      "lastName":"Oda",
      "Title": "Mr",
      "id": "3",
      "books": [
       {
        "id": "EO1",
        "title": "Wanted",
        "year":"1992"
       },
       {
        "id": "EO2",
        "title": "Ikki Yako",
        "year": "1993"
       },
       {
        "id": "EO3",
        "title": "Monsters",
        "year": "1994"
       }
    
      ],
      "Nationality": "Japanese"
     }
    ]

使用 JSON 提取器 Post 处理器,当我使用 JSON 路径表达式 $..id 时,它会给我所有的 ID,包括书籍的 ID。例如,它 returns [1,WS1,WS2,WS3,2,SS1,SS2,SS3,3,EO1,EO2,EO3]。我认为 .. in JSON 表示递归查找,这不是我想要的。我只想要来自顶层的 ID。 这可以使用内置的 JSON 提取器来实现吗,或者我必须使用某种 Groovy 脚本。

.. 运算符代表 deep scan,如果您只需要顶级 ID,则应使用以下 JsonPath 表达式:

$.[*].id

演示:

更多信息:API Testing With JMeter and the JSON Extractor