如何使用jq单行命令从JSON列表中提取元素排名信息
jq提取JSON列表排名的单行实现方案
需求
使用jq单行命令,从JSON结构中提取分类下的列表元素排名,元素在列表中的排列顺序即为其对应排名位次。
示例输入
文件中每个JSON对象实际为单行存储,格式化后结构参考:
{ "category":"triathlon", "athletes_list":[ {"athlete_name": "Ubain Solt"}, {"athlete_name": "Jon Snow"}, {"athlete_name": "Mickey Mouse"} ] } { "category":"swimming", "athletes_list":[ {"athlete_name": "Picheal Phelms"}, {"athlete_name":"Lacky Kedetie"} ] }
期望输出
{"a":"Ubain Solt", "r":0, "c":"triathlon"} {"a":"Jon Snow", "r":1, "c":"triathlon"} {"a": "Mickey Mouse", "r":2, "c":"triathlon"} {"a": "Picheal Phelms", "r":0, "c":"swimming"} {"a": "Lacky Kedetie", "r":1, "c":"swimming"}
执行命令
将命令末尾的input.json替换为实际文件路径即可运行:
jq -c '. as $root | .athletes_list | to_entries[] | {a: .value.athlete_name, r: .key, c: $root.category}' input.json
命令逻辑说明:
-c参数指定输出紧凑单行JSON,匹配要求的输出格式- 先将顶层分类对象暂存为变量,避免遍历运动员列表时丢失分类字段上下文
- 通过
to_entries将数组转换为带索引键的结构,直接用数组索引作为排名值 - 最终组装输出对象,分别映射运动员姓名、排名、分类三个字段
内容的提问来源于stack exchange,提问作者decoyoctopus1489
相关产品推荐
相关产品推荐

