如何使用jq提取JSON中各唯一键对应的所有值并封装为对象
jq处理JSON数组实现键值列表聚合
前置要求
确保你的输入是包裹在[]中的合法JSON数组,你给出的示例为数组内的元素结构,需先补全外层数组括号才可正常解析。
核心处理命令
jq 'reduce .[] as $item ({}; .[$item | keys[]] += [$item[.]])' input.json
效果示例
输入样例
[ { "sepalLength": 5, "sepalWidth": 3.3, "petalLength": 1.4, "petalWidth": 0.2, "species": "setosa" }, { "sepalLength": 7, "sepalWidth": 3.2, "petalLength": 4.7, "petalWidth": 1.4, "species": "versicolor" }, { "sepalLength": 6.4, "sepalWidth": 3.2, "petalLength": 4.5, "petalWidth": 1.5, "species": "versicolor" } ]
输出结果
{ "sepalLength": [ 5, 7, 6.4 ], "sepalWidth": [ 3.3, 3.2, 3.2 ], "petalLength": [ 1.4, 4.7, 4.5 ], "petalWidth": [ 0.2, 1.4, 1.5 ], "species": [ "setosa", "versicolor", "versicolor" ] }
命令逻辑说明
- 遍历输入数组中的每一个对象,以空对象作为初始聚合容器
- 逐个提取当前对象的所有键,将键对应的值追加到聚合容器同键名的数组中
- 自动收集所有出现过的唯一键,兼容数组中对象键不完全一致的场景
内容的提问来源于stack exchange,提问作者robby
相关产品推荐
相关产品推荐

