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

如何使用JMESPath根据params中bar的text值筛选记录?

筛选符合特定params条件的record条目

现有代码通过JMESPath表达式[].record从foobar.json中获取全部记录,需要修改表达式,仅保留满足以下条件的record:

  • 该record的params数组中存在条目
  • 条目name值为bar
  • 条目text值(转为数字后)≥13

示例数据(foobar.json)

[
    {
        "record": {
            "name": "foobar1",
            "params": [
                {"name": "foo", "text": "4"},
                {"name": "bar", "text": "12"}
            ]
        }
    },
    {
        "record": {
            "name": "foobar2",
            "params": [
                {"name": "foo", "text": "4"},
                {"name": "bar", "text": "16"}
            ]
        }
    }
]

修改后的Python代码

import json
import jmespath

with open('foobar.json', 'r') as fp:
    data = json.load(fp)
# 核心筛选表达式
expr = '[?record.params[?name==`bar` && to_number(text)>=13]].record'
records = jmespath.search(expr, data)
print(records)

表达式逻辑说明

  • [?...]:数组过滤语法,仅保留满足内部条件的元素
  • record.params[?name==bar && to_number(text)>=13]:检查当前元素的params数组中是否存在符合要求的子项:
    • name==bar``:精准匹配name为bar的params条目
    • to_number(text)>=13:将text字符串转为数字后做数值比较(原数据中text是字符串类型,直接比较会导致逻辑错误)
  • .record:最终提取符合条件的record对象

运行结果

返回仅包含foobar2的目标记录:

[{'name': 'foobar2', 'params': [{'name': 'foo', 'text': '4'}, {'name': 'bar', 'text': '16'}]}]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 21:03:16