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

如何使用JQ精准筛选CEO名为John的目标公司对象

JQ 精准匹配同员工多条件的实现方案

问题场景

给定如下结构的公司员工JSON对象:

{
    "company1": {
        "employees": [
            {"name": "John", "title": "CEO"},
            {"name": "Jason", "title": "CFO"},
            {"name": "Jackson", "title": "Sales Representative"}
        ]
    },
    "company2": {
        "employees": [
            {"name": "Amy", "title": "CEO"},
            {"name": "James", "title": "Software Engineer"},
            {"name": "John", "title": "Sales Representative"}
        ]
    }
}

需求是筛选出CEO姓名为John的公司,原有错误JQ过滤器如下:

map_values(select(.employees | select((.[] .name | contains("John")) and (.[] .title | contains("CEO")) )))

原有逻辑问题

原写法两次独立调用.[]遍历员工数组,相当于分别判断「列表里有没有叫John的人」和「列表里有没有职称是CEO的人」,两个判断互不关联,只要两个条件各自存在匹配项就会选中公司,无法保证两个条件命中同一个员工,因此会错误匹配company2。

正确写法

核心思路是让姓名、职称两个判断作用在同一个员工对象上,修正后的过滤器:

map_values(select(.employees | any(.name == "John" and .title == "CEO")))

如果需要保留contains的模糊匹配能力(比如匹配姓名包含John、职称包含CEO的场景),可以调整为:

map_values(select(.employees | any( (.name | contains("John")) and (.title | contains("CEO")) )))

逻辑解释

  • any()会遍历employees数组的每一个员工条目,对单个员工对象同时校验姓名和职称条件
  • 只有当数组中存在至少一个员工同时满足姓名、职称两个要求时,才会选中当前公司
  • 执行后只会返回符合要求的company1,不会误判company2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 21:48:14