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

JQ中.my_array与.my_array[]两种数组访问写法有什么区别?

jq 数组访问两种写法的差异与设计逻辑

精确差异

两种写法的核心区别在返回值的类型、数量和后续操作逻辑:

  • .my_array 是直接取值过滤器:提取JSON中my_array字段对应的完整数组,返回1个类型为数组的结果。后续管道操作会作用在整个数组上,比如执行.my_array | length得到的是数组的元素总数2。
  • .my_array[] 是数组展开迭代器:会把输入的数组拆成独立的元素流输出,返回结果的数量等于数组的长度,每个结果的类型是数组元素本身的类型(你示例中就是object类型)。后续管道操作会自动应用到每一个单独的元素上,比如执行.my_array[] | .id会依次返回1、2两个结果。

你可以加-c参数对比输出差异,会更直观:

# 输出1行完整数组
$ echo '{"my_array":[{"id":1},{"id":2}]}' | jq -c '.my_array'
[{"id":1},{"id":2}]

# 输出2行,每行一个独立的元素
$ echo '{"my_array":[{"id":1},{"id":2}]}' | jq -c '.my_array[]'
{"id":1}
{"id":2}

设计区分的原因

jq是面向流处理设计的JSON处理工具,这种区分是为了适配不同的处理场景,简化操作逻辑:

  • 当你需要对数组整体做操作(比如计算长度、排序、修改后保留原数组结构、统计聚合),直接使用.my_array操作整个数组即可
  • 当你需要对数组内的每个元素单独处理(比如过滤符合条件的元素、逐个修改属性、批量导出元素),直接用.my_array[]展开即可,不需要额外写循环遍历逻辑,jq会自动把后续的过滤器应用到每个展开的元素上,大幅简化了序列处理的代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 16:15:04