Jmeter Json Extractor多条件提取:获取符合指定条件的首个id值
在JMeter中用JSON Extractor提取符合条件的第一个id值
没问题,我来帮你搞定这个提取需求!按照下面的步骤操作就能精准拿到你想要的第一个符合Principals.value.type='USER'的id:
1. 添加并配置JSON Extractor
首先,在你的HTTP请求取样器(或其他返回JSON响应的取样器)下面添加一个JSON Extractor:
- 右键取样器 → 选择「添加」→ 「后置处理器」→ 「JSON Extractor」
然后配置关键参数:
- 变量名称:填一个你方便后续引用的变量名,比如
target_user_id - JSON Path 表达式:这是核心,根据你的JSON结构,用这个表达式就能定位到目标id:
$.content[?(@.Principals.value.type == 'USER')][0].id - 匹配数字:填
1(确保只取第一个符合条件的结果) - 默认值:可以填
NO_MATCH_FOUND,这样如果没找到符合条件的id,变量会被设为这个值,方便调试排查问题
2. 表达式拆解说明
我把这个JSON Path表达式拆解开,方便你理解和调整(如果你的JSON结构有细微变化的话):
$.content:定位到JSON根节点下的content数组(对应你示例里的顶层数组结构)[?(@.Principals.value.type == 'USER')]:过滤content数组中,满足Principals.value.type等于USER的所有对象[0]:从过滤后的结果里取第一个对象.id:提取这个对象的id字段值
3. 示例验证
假设你的完整响应JSON是这样的:
{ "content": [ { "id": "210A3A-0135-1036-90B8-0A2163", "name": "xyy 927", "Principals": { "value": { "type": "ROLE" } } }, { "id": "456XYZ-789AB-012CD-345EF-678GH", "name": "user_001", "Principals": { "value": { "type": "USER" } } }, { "id": "987FGH-654DE-321BC-098AB-765CD", "name": "user_002", "Principals": { "value": { "type": "USER" } } } ] }
用上面的表达式提取后,target_user_id变量的值就是456XYZ-789AB-012CD-345EF-678GH,也就是第一个符合type='USER'的id。
小提示
如果你的JSON结构里Principals是数组而不是对象,那表达式需要调整成类似$.content[?(@.Principals[*].value.type == 'USER')][0].id,不过根据你的描述,前面的表达式就足够满足需求了。
内容的提问来源于stack exchange,提问作者Roop
相关产品推荐
相关产品推荐

