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

如何用jq提取JSON不同分组键下的所有name字段值?

正确提取JSON多组数组内name字段的jq命令

问题背景

原始JSON数据:

{
  "group1": [
    {
      "name": "name_AAA",
      "size": 1
    },
    {
      "name": "name_BBB",
      "size": 2
    }
  ],
  "group2": [
    {
      "name": "name_CCC",
      "size": 3
    },
    {
      "name": "name_DDD",
      "size": 4
    }
  ]
}

需要提取所有name字段的值,期望输出:

name_AAA
name_BBB
name_CCC
name_DDD

尝试执行了以下命令:

$ jq -r '.group1[] * .group2[] | .name' < "mydata.json"

但得到不符合预期的输出:

name_CCC
name_CCC
name_DDD
name_DDD

求正确的jq命令写法。


问题分析

你用的*是jq的对象合并操作符,.group1[] * .group2[]会对group1的每个对象和group2的每个对象做笛卡尔积合并,合并时后面对象的字段会覆盖前面的,所以最终取.name时只会得到group2里的name值,再加上笛卡尔积的重复次数,就出现了重复输出的情况。

正确命令示例

写法1:合并数组后提取

先把group1和group2的数组合并成一个数组,再遍历提取每个元素的name:

jq -r '.group1 + .group2 | .[] | .name' mydata.json

写法2:分别提取再输出

直接依次提取两个数组的所有name字段,jq会自动按顺序输出结果:

jq -r '.group1[].name, .group2[].name' mydata.json

写法3:通用处理所有数组(适用于多组场景)

如果JSON里还有更多类似group的数组键,可以直接遍历所有顶层值(即所有数组),再提取每个元素的name:

jq -r '.[] | .[] | .name' mydata.json

以上三种写法都能得到你想要的输出结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 02:40:18