jq:迭代另一个对象中的数组元素时重复一个对象的值

问题描述 投票:0回答:2

输入:

{
  "level1": {
    "id": "a"
  },
  "level2": [
    {
      "id": "1"
    },
    {
      "id": "2"
    }
  ]
}
{
  "level1": {
    "id": "b"
  },
  "level2": [
    {
      "id": "3"
    },
    {
      "id": "4"
    }
  ]
}

预期输出:

a  1 
a  2 
b  3 
b  4 

我基本上想要完成的是:

jq -r '[ .level1.id, (.level2[] |.id ) ]|@tsv'

其中 .level1.id 对 .level2 数组中的每个对象重复,但我似乎无法以正确的方式思考问题

jq
2个回答
0
投票

在另一个数组构造函数(外部

.level2[]
)中使用
[…]
只会收集迭代到该构造数组中的所有项目。将它们分开以在另一个数组之外进行迭代,使两个部分自己创建(子)数组,然后将它们添加在一起:

[.level1.id] + (.level2[] | [.id]) | @tsv

演示

或者,使用可以从数组构造函数内部引用的变量:

.level2[] as {$id} | [.level1.id, $id] | @tsv

演示

输出:

a   1
a   2
b   3
b   4

0
投票

将第一级 id 包装到一个数组中,然后附加第二级中的每个 id:

[.level1.id] + (.level2[]|[.id]) | @tsv
© www.soinside.com 2019 - 2024. All rights reserved.