如何使用jq将指定JSON转换为c/d前置、其余列排序的表格?
使用jq将JSON数据转换为指定格式的表格
问题描述
现有JSON数据:
{"data": [{"a": 1, "d": 2, "c": 3, "b": 4}, {"a": 5, "d": 6, "c": 7, "b": 8, "e": 9}]}
需要转换为以下格式的表格:
c d a b e 3 2 1 4 <absent> 7 6 5 8 9
具体要求:
- 将列
c和d移至表格开头 - 其余所有列按字母顺序排序
解决方案
可以使用以下jq命令实现:
.data | (map(keys) | add | unique) as $allKeys | ($allKeys - ["c", "d"]) | sort as $sortedRest | ["c", "d"] + $sortedRest as $columns | $columns, (.[] | $columns | map(.[.] // "<absent>")) | @tsv
命令解释
.data:提取JSON中的数据数组(map(keys) | add | unique) as $allKeys:收集所有对象的键并去重,得到所有列名($allKeys - ["c", "d"]) | sort as $sortedRest:排除c和d后,将剩余列名按字母排序["c", "d"] + $sortedRest as $columns:构造最终的列顺序,把c、d放在开头,后面跟排序后的剩余列$columns, (.[] | $columns | map(.[.] // "<absent>")):先输出列名行,再遍历每个对象,按列顺序提取值,不存在的用<absent>填充@tsv:将结果转换为制表符分隔的格式,显示时表现为多空格分隔,符合需求格式
运行效果
执行上述jq命令后,输出结果与要求的表格格式完全一致。
内容的提问来源于stack exchange,提问作者cppdev
相关产品推荐
相关产品推荐

