我的回应如下
{
"id": "3452",
"enrollable_id": "3452",
"enrollable_type": "Enrollment"
}
{
"id": "3453",
"enrollable_id": "3453",
"enrollable_type": "Task"
}
{
"id": "3454",
"enrollable_id": "3454",
"enrollable_type": "Enrollment"
}
{
"id": "3455",
"enrollable_id": "3455",
"enrollable_type": "Task"
}
仅当enrollable_type =注册时,我才想获取ID [3452和3454]。这是用于jmeter正则表达式提取器的,因此,如果我仅能使用一个线性正则表达式来提取3452和3454,那就太好了。
答案 0 :(得分:1)
仅使用正则表达式来解析结构化数据通常是一个坏主意,但是如果您打算采用这种方法,那么请执行以下操作:
"(\d+)"\s*,\s*(?="enrollable_type":\s*"Enrollment")
这假设entrollable_type
始终跟随enrollable_id
,并且所有引用均一致,并留有一点空白。如有必要,您应该能够处理更多的差异,例如,如果不确定是否可以依赖键或引用的数据(["']?
)。但是,如果您可以依赖属性的顺序(例如,如果键入的类型位于id之前),则应放弃使用正则表达式。
以下是使用JavaScript的示例
const text = `{ "id": "3452", "enrollable_id": "3452", "enrollable_type": "Enrollment" } { "id": "3453", "enrollable_id": "3453", "enrollable_type": "Task" } { "id": "3454", "enrollable_id": "3454", "enrollable_type": "Enrollment" } { "id": "3455", "enrollable_id": "3455", "enrollable_type": "Task" }`;
const re = /"(\d+)"\s*,\s*(?="enrollable_type":\s*"Enrollment")/g;
var match;
while(match = re.exec(text)) {
console.log(match[1]);
}
答案 1 :(得分:1)
您要查找的RegEx是:
_id":\s*"([^"]+(?=[^\0}]+_type":\s*"E))
说明
_id":\s*" Finds the place where the enrollment_id is [^"]+(?= Matches the ID if: [^\0}]+_type":\s* Finds the place where enrollable_type is "E Checks if the enrollable type begins with an uppercase E ) End if ( ) Captures the ID
请务必注意,此RegEx将在有效的人上匹配,并捕获有效的 ID 。这意味着您将需要获取每个比赛的捕获,而不仅仅是获取每个比赛。
上面的RegEx包含反斜杠,如果使用RegEx作为字符串文字,则需要转义。
这是RegEx,所有必需的转义字符都转义了:
_id":\\s*"([^"]+(?=[^\\0}]+_type":\\s*"E))
答案 2 :(得分:0)
您的回复似乎是JSON的回复(但是格式错误)。如果是这种情况,并且确实是JSON,我建议您改用JSON Extractor,因为正则表达式易碎,对标记更改,换行,元素顺序等敏感,而JSON Extractor仅查找内容。
相关的JSON Path query类似于:
NULL
演示:
更多信息:JMeter's JSON Path Extractor Plugin - Advanced Usage Scenarios
答案 3 :(得分:0)
您可以通过两种方式提取数据
要使用json提取器提取数据,响应数据应遵循json语法规则,
要提取数据,请在json提取器中使用以下JSON路径
$ mcs -out:PrintPrimes PrintPrimes.cs
$ ./PrintPrimes
2
3
5
7
11
13
17
19
并使用匹配号$..[?(@.enrollable_type=="Enrollment")].id
,如下所示
-1
id": "(.+?)",\s*(.+?)\s*"enrollable_type": "Enrollment
如下所示
更多信息