我有一个带有嵌套数组的响应,我需要提取属性为“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
}
]
}
}
}
要提取“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 数据。