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

如何使用JQ实现多层级JSON对象过滤?

用JQ实现两种JSON格式转换

格式1:保留一级name字段及过滤后的definedRanges数组

假设你需要过滤definedRanges中符合特定条件的元素(比如排除type为"C"的项),可以用以下命令:

jq '{name, definedRanges: [.definedRanges[] | select(.type != "C")]}' input.json
  • {name} 直接提取顶层的name字段
  • definedRanges: [...] 重新构造数组:通过.definedRanges[]遍历原数组元素,select(.type != "C")过滤掉不符合条件的项,最后把结果重新打包成数组

如果过滤条件不同(比如只保留start小于10的元素),修改select()内的判断逻辑即可,例如select(.start < 10)。

格式2:将每个definedRanges元素与对应一级name展开为单条对象

要把definedRanges的每个元素单独拆成一个对象,同时带上顶层的name字段,用这条命令:

jq 'as $parent | .definedRanges[] | {name: $parent.name, start, end, type}' input.json
  • as $parent 先把整个顶层对象存入变量$parent,方便后续引用它的name
  • .definedRanges[] 遍历数组中的每一个元素
  • {name: $parent.name, start, end, type} 构造新对象,将顶层name与当前遍历到的definedRanges元素字段合并

如果definedRanges内还有其他需要保留的字段,直接在对象结构里添加即可,比如加上description: .description。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 05:00:58