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

如何用jq按国家及层级值分组数组并封装实体?

用JQ实现按国家分组并分层级归类数据

需求说明

给定输入JSON,需完成以下处理:

  • 按country字段分组
  • 将条目分为两类:包含H1/H2层级的为一组,包含H3/H4层级的为另一组
  • 每组内的id和level字段封装到名为entities的数组中

输入JSON

{
  "hits": [
    {
      "country": "PT",
      "level": "H2",
      "id": "id1"
    },
    {
      "country": "PT",
      "level": "H1",
      "id": "id2"
    },
    {
      "country": "CZ",
      "level": "H2",
      "id": "id3"
    },
    {
      "country": "IT",
      "level": "H2",
      "id": "id4"
    },
    {
      "country": "PT",
      "level": "H3",
      "id": "id5"
    },
    {
      "country": "PT",
      "level": "H3",
      "id": "id6"
    },
    {
      "country": "PT",
      "level": "H4",
      "id": "id7"
    }
  ]
}

期望输出

{
  "hits": [
    {
      "country": "PT",
      "entities": [
        {
          "id": "id2",
          "level": "H1"
        },
        {
          "id": "id1",
          "level": "H2"
        }
      ]
    },
    {
      "country": "CZ",
      "entities": [
        {
          "id": "id3",
          "level": "H2"
        }
      ]
    },
    {
      "country": "IT",
      "entities": [
        {
          "id": "id4",
          "level": "H2"
        }
      ]
    },
    {
      "country": "PT",
      "entities": [
        {
          "id": "id5",
          "level": "H3"
        },
        {
          "id": "id6",
          "level": "H3"
        },
        {
          "id": "id7",
          "level": "H4"
        }
      ]
    }
  ]
}

JQ解决方案

执行以下JQ命令即可实现需求:

.hits
| group_by(.country)
| map(
    group_by(
        if .level | IN("H1", "H2") then "high" else "low" end
    )
    | map({
        country: first.country,
        entities: map({id, level})
    })
)
| flatten
| {hits: .}

命令分步解释

  • .hits:提取顶层的hits数组,作为后续操作的数据源
  • group_by(.country):将所有条目按country字段分组,得到每个国家对应的条目数组
  • 内层group_by(...):对每个国家的条目数组,进一步按层级分类:判断level是否为H1或H2,是则归为"high"组,否则归为"low"组,每个国家最多生成两个分组
  • map({country: first.country, entities: map({id, level})}):将每个分组转换为目标格式,country取分组内第一个条目的值,entities是分组内每个条目仅保留id和level字段后的数组
  • flatten:将嵌套的数组结构展平为一维数组,确保最终hits是单层数组
  • {hits: .}:将处理后的数组包装回顶层的hits对象,匹配期望的输出结构

内容的提问来源于stack exchange,提问作者António

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 00:47:06