如何用JsonPath获取优先级最小的记录ID数组?
获取优先级最小值对应的所有记录ID数组
原JsonPath表达式失效原因
多数JsonPath实现(比如Jayway、Goessner原始版本)不支持在过滤条件里直接调用min()这类聚合函数,没法在单次查询里同时完成最小值计算和条件匹配,所以你用的$.data[?(@.priority == $.data[*].priority.min())].id无法正常工作。
可行解决办法
方法1:用编程语言分步处理(推荐)
这种方式兼容性拉满,逻辑简单,适合绝大多数场景。
Python 示例代码
import json # 加载你的JSON数据(示例数据已简化) json_data = { "data": [ {"ticket": "249 [DH-249]", "id": 249, "priority": 3}, {"ticket": "250 [DH-250]", "id": 250, "priority": 3}, # 更多记录... ], "recordsFiltered": 195, "recordsTotal": 195, "draw": 1 } # 第一步:提取所有优先级,找出最小值 all_priorities = [item["priority"] for item in json_data["data"]] min_priority = min(all_priorities) # 第二步:筛选优先级等于最小值的记录,提取ID列表 target_ids = [item["id"] for item in json_data["data"] if item["priority"] == min_priority] print(target_ids) # 输出结果:[249, 250]
JavaScript 示例代码
const jsonData = { "data": [ {"ticket": "249 [DH-249]", "id": 249, "priority": 3}, {"ticket": "250 [DH-250]", "id": 250, "priority": 3}, // 更多记录... ], "recordsFiltered": 195, "recordsTotal": 195, "draw": 1 }; // 第一步:计算优先级最小值 const minPriority = Math.min(...jsonData.data.map(item => item.priority)); // 第二步:过滤并提取目标ID const targetIds = jsonData.data.filter(item => item.priority === minPriority).map(item => item.id); console.log(targetIds); // 输出结果:[249, 250]
方法2:分两次执行JsonPath查询(仅适配部分实现)
如果必须用JsonPath,只能拆成两步:
- 先查询所有优先级值,手动找出最小值:
拿到所有优先级后,确定最小值(比如示例里的3)。$.data[*].priority - 再用这个最小值作为条件,筛选并提取ID:
注意:不同JsonPath实现的语法细节可能有差异,比如部分实现要求用$.data[?(@.priority == 3)].id===,或者数值是否需要加引号(数值类型建议不要加)。
额外说明
少数增强版JsonPath库支持变量或脚本表达式,但这类实现不通用,所以用编程语言分步处理是最稳妥的方案。
内容的提问来源于stack exchange,提问作者askingstuff
相关产品推荐
相关产品推荐

