如何使用jq过滤JSON指定字段并生成CSV文件?
解决方法:提取指定字段生成CSV
针对你的需求,直接指定要提取的name和version字段即可,无需动态遍历所有键,以下是最简可行命令:
jq -r '["name", "version"], (.[] | [.name, .version]) | @csv'
命令说明:
["name", "version"]:生成CSV的表头行(.[] | [.name, .version]):遍历输入的JSON数组,每个对象提取name和version字段组成数组| @csv:将数组格式化为CSV字符串-r:输出原始文本(避免JSON字符串的引号包裹)
你的原命令问题分析:
- 你先通过
map(keys) | add | unique获取了所有字段(包含不需要的env)作为列集合$cols,但后续构建的$row只保留了name和version,导致$cols中的env字段在$row中找不到对应值,会生成空列 - 外层的
map(.[] | ...)属于冗余逻辑——输入本身是数组,.[]已经在遍历元素,再套map会重复处理,导致逻辑混乱
如果需要灵活指定字段(比如后续要调整提取的字段),可以用参数传入字段列表:
jq -r --argjson fields '["name", "version"]' '$fields, (.[] | [$fields[] | .[$_]]) | @csv'
这样只需修改--argjson后的字段数组,无需改动jq核心脚本。
内容的提问来源于stack exchange,提问作者Rafael Moreira
相关产品推荐
相关产品推荐

