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

如何使用JQ筛选JSON数组中的对象并保留指定字段?

解决JQ筛选数组JSON对象保留指定字段的问题

你需要遍历data数组中的每个对象,为每个对象仅保留a和b字段,以下是几种可行的方法:

方法1:简洁字段提取

使用JQ的简写语法直接提取指定字段:

.data[] | {a, b}

解释:

  • .data[]:遍历data数组中的每一个对象
  • {a, b}:等价于{a: .a, b: .b},从当前遍历到的对象中提取a和b字段,生成新的对象

执行后输出完全符合你的期望:

{"a": "a1", "b": "b1"}
{"a": "a2", "b": "b2"}

方法2:使用pick方法(适合多字段场景)

如果需要保留的字段较多,用pick更易维护:

.data[] | pick(["a", "b"])

只需将需要保留的字段名放入数组中即可,效果和方法1一致。

为什么你的之前的命令出错?

你使用的{a: .data[].a, b: .data[].b}会导致笛卡尔积:

  • .data[].a会遍历数组所有元素的a字段,得到"a1"、"a2"
  • .data[].b会遍历数组所有元素的b字段,得到"b1"、"b2"
  • JQ会将这两组值的所有组合生成对象,因此得到4个结果,这显然不是你想要的对应关系。

可选:输出为数组格式

如果你希望输出是一个包含处理后对象的数组,而不是每个对象单独输出,可以用数组包裹结果:

[.data[] | {a, b}]

输出结果:

[
  {"a": "a1", "b": "b1"},
  {"a": "a2", "b": "b2"}
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 17:25:54