如何用jq按顺序展平JSON对象中的多个数组?
使用jq提取JSON中所有数组元素并保持原有顺序
原始JSON输入
{ "Nemo": [ 3694756688, 3694756832, 3694756650 ], "Firefox": [ 3694756795, 3694756407, 3694756412, 3694756395 ], "Codium": [ 3694756035, 3694756383, 3694756378 ], "Terminals": [ 3694756804, 3694756802, 3694756428 ] }
(注:原始输入中Terminals数组的闭合括号缺失,已补全以保证JSON合法)
需求
将所有数组中的数值按原有顺序提取,每行输出一个数值,最终输出如下:
3694756688 3694756832 3694756650 3694756795 3694756407 3694756412 3694756395 3694756035 3694756383 3694756378 3694756804 3694756802 3694756428
jq实现命令
jq -r '.[] | .[]' input.json
命令解释
-r:开启原始输出模式,避免输出结果带引号.[]:首先遍历顶层对象的所有值(也就是各个数组),jq 1.5及以上版本默认会保持对象键的插入顺序,因此数组的顺序和原始JSON完全一致- 第二个
.[]:遍历每个数组中的元素,将每个数值单独输出
如果你的jq版本低于1.5,需要显式指定按原始顺序处理对象,可使用如下命令:
jq -r 'keys[] as $k | .[$k][]' input.json
keys[]会按对象键的插入顺序返回键名,再通过键名获取对应的数组并遍历元素,以此保证顺序符合要求。
内容的提问来源于stack exchange,提问作者Ahmad Ismail
相关产品推荐
相关产品推荐

