jq迭代数组元素时重复引用另一对象值的实现方法
问题
现有JSON输入:
{ "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命令即可实现需求:
jq -r '.level2[] | [.level1.id, .id] | @tsv'
或者用变量绑定让逻辑更清晰:
jq -r 'let parentId = .level1.id; .level2[] | [parentId, .id] | @tsv'
这两个命令会遍历每个顶级对象的.level2数组,为数组内每个元素生成一行,每行包含对应的.level1.id和当前数组元素的.id,输出格式与预期一致。
内容的提问来源于stack exchange,提问作者Kyle Banerjee
相关产品推荐
相关产品推荐

