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

如何用jq提取heroes.json中嵌套数组的指定字段?

使用jq提取英雄字段并精简超能力数组

没问题,这需求用jq完全可以优雅实现,根本不用手动写迭代器~先假设你的heroes.json结构大概是这样(方便对应理解):

[
  {
    "hero": "Superman",
    "superpowers": [
      {"name": "Flight", "des": "Can fly at supersonic speeds", "other_field": "irrelevant"},
      {"name": "Super Strength", "des": "Lifts heavy objects", "extra": "something"}
    ],
    "other_info": "whatever"
  },
  {
    "hero": "Batman",
    "superpowers": [
      {"name": "Intelligence", "des": "Genius-level intellect", "foo": "bar"}
    ]
  }
]

直接给你能用的jq命令:

jq 'map({hero, superpowers: .superpowers | map({name, des})})' heroes.json

拆解开看看逻辑:

  • 外层map(...):遍历数组里的每一个英雄对象,逐个处理
  • {hero}:这是jq的简洁写法,等价于{hero: .hero},直接提取当前对象的hero字段
  • superpowers: .superpowers | map({name, des}):
    • 先获取当前英雄的superpowers嵌套数组
    • 再用map({name, des})遍历这个数组,每个超能力对象只保留name和des字段,自动丢掉其他无关字段
  • 最后把处理后的所有英雄对象重新组合成数组输出

如果想要直接修改原文件(注意:会覆盖原文件,建议先备份),可以用这个命令:

jq '. = map({hero, superpowers: .superpowers | map({name, des})})' heroes.json > temp.json && mv temp.json heroes.json

额外小提示:

如果有些英雄可能没有superpowers字段(比如普通人?),可以加个容错处理避免报错:

jq 'map({hero, superpowers: (.superpowers // []) | map({name, des})})' heroes.json

这里的// []意思是:如果.superpowers不存在或者是null,就用空数组替代,这样就不会因为缺失字段而抛出错误啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:08:44