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

使用jq能否筛选多级JSON指定字段并返回原结构对象?

结论

完全可以实现,jq原生支持嵌套结构构造,可精准保留原JSON的层级结构,仅筛选需要的字段。

示例场景实现

你给出的示例对应的jq命令如下:

jq '{string, object: {a}}' 输入文件路径

执行后输出结果和你预期的完全一致:

{
  "object": {
    "a": "b"
  },
  "string": "Hello World"
}

多层级通用写法

不管JSON层级多深,都可以按照「层级嵌套构造对象」的规则编写筛选规则,规则如下:

  • 同一层级需要保留的多个字段用英文逗号分隔
  • 子层级需要筛选字段的,在父字段后用冒号加嵌套的对象结构,逐层往下写即可

比如4层以上的复杂场景示例,假设你需要保留:

  • 顶层字段:name、id
  • 顶层对象info下的字段:createTime、updateTime
  • info下的对象ext下的字段:type、status
  • ext下的对象detail下的字段:content、url

对应的jq规则写法:

jq '{name, id, info: {createTime, updateTime, ext: {type, status, detail: {content, url}}}}' 输入文件路径

特殊场景处理

如果需要筛选数组内对象的指定字段,配合数组遍历语法即可,比如顶层data字段是数组,每个元素需要保留id和title,写法如下:

jq '{data: [.data[] | {id, title}], 其他需要保留的顶层字段}'

如果担心某层级字段不存在导致报错,可以加可选符?和空值 fallback 逻辑:

# 即使object字段不存在也不会报错,会返回空对象
jq '{string, object: (.object? // {} | {a})}' 输入文件路径

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 04:54:04