You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在JMeter中基于isFolder条件提取JSON指定ID的方法

提取JSON中isFolder为false的对象ID问题

问题描述

我有一个包含嵌套数组的JSON响应,需要提取所有isFolder属性为false的对象的id。尝试使用JSON提取器执行以下两个表达式,但调试取样器显示变量为空,无法成功提取:

$.data.tileGrid.items[?(@.isFolder == false)][1].id
$..[?(@.isFolder == false)].id

对应的JSON响应结构如下:

{
    "data": {
        "navigation": {
            "hasNextPage": true,
            "urlNextPage": "\/docs\/shared\/?nav-folder_list_14=page-2",
            "pageSize": 50,
            "currentPage": 1
        },
        "tileGrid": {
            "itemType": "BX.Disk.TileGrid.Item",
            "id": "folder_list_14",
            "items": [
                {
                    "isFile": false,
                    "canAdd": true,
                    "link": "\/docs\/shared\/path\/%D0%9F%D0%9A%D0%9E\/",
                    "isFolder": true,
                    "id": "6789192",
                    "isSymlink": false
                },
                ...
                {
                    "isFile": true,
                    "canAdd": true,
                    "link": "\/docs\/shared\/path\/%D0%9F%D0%9A%D0%9E\/",
                    "isFolder": false,
                    "id": "6789192",
                    "isSymlink": false
                }
             ]
         }
     }
}

问题分析与解决方法

原有表达式的问题

  • 第一个表达式中[1]指定取过滤后数组的第2个元素(JPath索引从0开始),若过滤结果数量不足则取不到值;且要提取所有符合条件的ID,不应添加该索引限制。
  • 第二个表达式用$..递归遍历所有节点,JMeter的JSON提取器基于Jayway JsonPath,这种递归过滤写法可能因结构匹配偏差导致取不到值。

正确的JPath表达式

要提取所有符合条件的id,使用以下表达式:

$.data.tileGrid.items[?(@.isFolder == false)].id

JMeter JSON提取器关键设置

  • Match No.:设置为-1,表示提取所有匹配到的ID,而非仅第一个。
  • 变量名:自定义变量名(如fileIds),提取后会生成fileIds_1、fileIds_2等变量,同时fileIds_matchNr会返回匹配到的总数。

完成上述设置后,调试取样器即可显示所有成功提取的目标ID。

内容的提问来源于stack exchange,提问作者Cavaleriy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 10:42:21