使用jq统计JSON数组中各trait对应value的唯一出现次数
jq统计属性出现次数解决方案
直接使用的命令
jq 'map(.attributes[]) | group_by(.trait) | map({key: .[0].trait, value: map(.value) | reduce .[] as $val ({}; .[$val] += 1)}) | from_entries' 你的JSON文件路径
命令逻辑拆解
map(.attributes[]):遍历输入的JSON数组所有元素,提取每个元素下的attributes数组内容,展开为仅包含所有trait+value对象的一维数组group_by(.trait):将上述一维数组按trait字段的值分组,相同trait的对象会被归入同一个子数组map({key: .[0].trait, value: ...}):遍历每个分组,生成为后续合并用的键值对结构:- 键为当前分组对应的
trait值 - 值部分先提取分组内所有
value字段,再通过reduce累加每个value的出现次数
- 键为当前分组对应的
from_entries:将所有键值对结构合并为最终的JSON对象
输出验证
使用你提供的示例输入运行上述命令,会直接得到你需要的输出格式:
{ "Color 1": { "Blue": 2 }, "Color 2": { "Yellow": 1, "Red": 1 }, "Hair": { "Wild": 2 } }
内容的提问来源于stack exchange,提问作者hacktek
相关产品推荐
相关产品推荐

