如何用jq从对象数组中提取值组成数组的数组
将JSON对象数组转换为值的二维数组
输入JSON
[ { "k1": "o1k1", "k2": "o1k2", "k_opt1": "o1k_xxx" }, { "k1": "o2k1", "k2": "o2k2", "k_opt2": "o2k_yyy" } ]
期望输出
[ [ "o1k1", "o1k2", "o1k_xxx" ], [ "o2k1", "o2k2", "o2k_yyy" ] ]
问题分析
之前使用的jq命令 .[] | to_entries[].value 会把所有对象的元素值平铺输出——.[] 展开了外层数组,to_entries[].value 又展开了每个对象的取值,最终得到的是单个值的序列,而非目标二维数组。
解决方案
使用以下jq命令即可实现需求:
jq 'map(values)' input.json
或者等价的显式写法:
jq 'map([to_entries[].value])' input.json
命令说明
map():遍历输入数组中的每个对象,对每个对象执行括号内的表达式values:jq内置函数,直接提取对象的所有值并组成数组,是[to_entries[].value]的简洁替代- 最终
map()会将每个对象转换后的数组收集起来,形成外层的二维数组
验证结果
执行命令后,输出与期望结果完全一致。
内容的提问来源于stack exchange,提问作者murison
相关产品推荐
相关产品推荐

