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

如何使用jq及自定义压缩函数实现数组配对

使用jq转换嵌套JSON数组为键值对对象数组

假设你的输入是类似这样的嵌套JSON数组(第一个子数组是字段名,后续子数组是对应值):

[
  ["USER", "TTY", "TIME"],
  ["root", "pts/0", "00:00:01"],
  ["guest", "pts/1", "00:00:05"]
]

可以用这条jq命令实现转换:

.[0] as $keys | .[1:] | map([$keys, .] | transpose | from_entries)

命令拆解

  • .[0] as $keys:提取第一个子数组作为字段名列表,存入变量$keys
  • .[1:]:筛选出除字段名外的所有数据行
  • map(...):遍历每一行数据做转换
    • [$keys, .] | transpose:把字段名列表和当前数据行配对,转成[[键1, 值1], [键2, 值2]]的结构
    • from_entries:将上述结构直接转换成键值对对象

执行后得到的输出是:

[
  {
    "USER": "root",
    "TTY": "pts/0",
    "TIME": "00:00:01"
  },
  {
    "USER": "guest",
    "TTY": "pts/1",
    "TIME": "00:00:05"
  }
]

如果遇到字段名和值的数量不匹配的情况,from_entries会自动忽略多余的键或值,也可以额外添加提示逻辑:

.[0] as $keys | .[1:] | map(
  if ($keys | length) != (. | length) then
    @warn ("Mismatched lengths at row: \(index)")
  end;
  [$keys, .] | transpose | from_entries
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 12:22:38