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

基于索引奇偶性用JQ将可变长度数组转换为对象的通用方案

问题:用JQ按索引奇偶性批量处理嵌套数组

需求

需要用JQ工具处理一组长度可变的嵌套数组:

  • 偶数索引(从0开始计数)的数组转换为包含name、value字段的父节点
  • 紧随该偶数索引数组的奇数索引数组,作为对应父节点的children字段值
  • 需适配大量数据的通用方案,当前实现仅能转换前一组数据,后续节点无法正确关联到对应父节点

输入JSON示例

[
  [
    [
      "dev",
      5
    ],
    [
      [
        "RT",
        1
      ],
      [
        "CP",
        2
      ]
    ]
  ],
  [
    [
      "jez",
      2
    ],
    [
      [
        "ME",
        1
      ],
      [
        "PW",
        1
      ]
    ],
    [
      "lem",
      3
    ],
    [
      [
        "AR",
        1
      ],
      [
        "ME",
        2
      ]
    ],
    [
      "has",
      1
    ],
    [
      [
        "MOBILE",
        1
      ]
    ]
  ]
]

期望输出

{
  "children": [
    {
      "name": "dev",
      "value": 5,
      "children": [
        {
          "name": "RT",
          "value": 1
        },
        {
          "name": "CP",
          "value": 2
        }
      ]
    }
  ]
}
{
  "children": [
    {
      "name": "jez",
      "value": 2,
      "children": [
        {
          "name": "ME",
          "value": 1
        },
        {
          "name": "PW",
          "value": 1
        }
      ]
    },
    {
      "name": "lem",
      "value": 3,
      "children": [
        {
          "name": "AR",
          "value": 1
        },
        {
          "name": "ME",
          "value": 2
        }
      ]
    },
    {
      "name": "has",
      "value": 1,
      "children": [
        {
          "name": "MOBILE",
          "value": 1
        }
      ]
    }
  ]
}

当前错误输出

{
  "children": [
    {
      "name": "dev",
      "value": 5,
      "children": [
        {
          "name": "RT",
          "value": 1
        },
        {
          "name": "CP",
          "value": 2
        }
      ]
    }
  ]
}
{
  "children": [
    {
      "name": "jez",
      "value": 2,
      "children": [
        {
          "name": "ME",
          "value": 1
        },
        {
          "name": "PW",
          "value": 1
        }
      ]
    }
  ]
}

解决方案

使用JQ的_nwise(2)函数将数组按每2个元素分组,正好匹配“父节点数组+子节点数组”的配对逻辑,通用命令如下:

.[] | {
  children: [
    . | _nwise(2) | {
      name: .[0][0],
      value: .[0][1],
      children: .[1] | map({name: .[0], value: .[1]})
    }
  ]
}

命令说明

  1. .[]:遍历顶层的每个子数组
  2. _nwise(2):将当前子数组拆分为连续的2元素子数组,自动完成“偶数索引父节点+奇数索引子节点”的配对
  3. 对每组配对数据:
    • 从第一个数组(父节点源数据)中提取name和value
    • 遍历第二个数组(子节点源数据),将每个子数组转换为{name, value}结构,作为children字段
  4. 最终将所有处理后的父节点包裹在children数组中输出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 01:01:13