在Jmeter中根据条件获取JSON提取

问题描述 投票:0回答:1

我有一个带有嵌套数组的响应,我需要提取属性为“isFolder”= false 的对象的 id。我怎样才能做到这一点?

我尝试过使用带有模式的 JSON 提取器

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

还尝试获取一个数组,然后用 0 匹配来选取一个随机值

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

但没有工作 - 调试采样器显示一个空变量。回复看起来像

{
    "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
                }
             ]
         }
     }
}
json jmeter
1个回答
0
投票

要提取“isFolder”: false 的 id,请使用:

Python 与 jsonpath-ng:

from jsonpath_ng.ext import parse

# JSON response
json_response = {
    "data": {
        "tileGrid": {
            "items": [
                {"isFolder": True, "id": "123456"},
                {"isFolder": False, "id": "6789192"}
            ]
        }
    }
}

jsonpath_expr = parse("$.data.tileGrid.items[?(@.isFolder == false)].id")
ids = [match.value for match in jsonpath_expr.find(json_response)]
print(ids)  # Output: ['6789192']

JMeter JSON 提取器: JSONPath: $.data.tileGrid.items[?(@.isFolder == false)].id 比赛编号:-1(适用于所有比赛) 变量:nonFolderIds 这将提取 6789192。调试以确认变量值。 确保测试通过有效的 JSON。使用任何可用的工具来验证 JSON 数据

© www.soinside.com 2019 - 2024. All rights reserved.