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

如何基于另一数组值筛选元素:MC级服务依赖关系查询

问题:找出特定关键级别的服务依赖关系

原始数据

{
    "services": [
        {
            "name": "B1",
            "criticality": "BC"
        },
        {
            "name": "B2",
            "criticality": "BC"
        },
        {
            "name": "M1",
            "criticality": "MC"
        },
        {
            "name": "M2",
            "criticality": "MC"
        },
        {
            "name": "M3",
            "criticality": "MC"
        },
        {
            "name": "M4",
            "criticality": "MC"
        }
    ],
    "links": [
        {
            "from_name": "B1",
            "to_name": "M1"
        },
        {
            "from_name": "M1",
            "to_name": "M2"
        },
        {
            "from_name": "M2",
            "to_name": "B2"
        },
        {
            "from_name": "M1",
            "to_name": "M3"
        },
        {
            "from_name": "M4",
            "to_name": "M2"
        }
    ]
}

需求

找出所有criticality等于MC且依赖其他criticality等于MC的服务,输出格式如下:

{
  "M1": [
    "M2",
    "M3"
  ],
  "M4": [
    "M2"
  ]
}

尝试的错误代码

.links[] as $in | .services.[] | select(.name == $in.from_name) | select(.criticality == "MC")

错误执行结果

{
  "name": "M1",
  "criticality": "MC"
}
{
  "name": "M2",
  "criticality": "MC"
}

解决方案

可以通过以下jq命令实现需求:

# 构建MC服务的快速查询集合
( .services | map(select(.criticality == "MC").name) | INDEX(.; .) ) as $mc_services
# 筛选出两端都是MC级别的链接
| .links | map(select($mc_services[.from_name] and $mc_services[.to_name]))
# 按来源服务分组,收集依赖的服务列表
| group_by(.from_name) | map({key: .[0].from_name, value: [.[].to_name]})
# 转换为目标对象格式
| from_entries

代码解释

  1. 构建MC服务集合:从services中筛选出所有criticality为MC的服务名称,用INDEX生成以服务名为键的对象,方便后续快速验证服务级别。
  2. 筛选有效链接:遍历links,只保留from_name和to_name都属于MC级别的链接。
  3. 分组收集依赖:将筛选后的链接按from_name分组,每组收集对应的to_name组成列表。
  4. 转换为目标格式:通过from_entries把分组后的键值对数组转换成最终的对象结构。

执行上述命令后,即可得到符合需求的输出结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 03:11:13