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

如何用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,只能拆成两步:

  1. 先查询所有优先级值,手动找出最小值:
    $.data[*].priority
    
    拿到所有优先级后,确定最小值(比如示例里的3)。
  2. 再用这个最小值作为条件,筛选并提取ID:
    $.data[?(@.priority == 3)].id
    
    注意:不同JsonPath实现的语法细节可能有差异,比如部分实现要求用===,或者数值是否需要加引号(数值类型建议不要加)。

额外说明

少数增强版JsonPath库支持变量或脚本表达式,但这类实现不通用,所以用编程语言分步处理是最稳妥的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 12:57:30