使用 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
演示:
在我的 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
演示: