如何用jq查询获取与name、role关联的bar、baz并输出为CSV
使用jq从JSON提取指定字段并输出CSV格式
嘿,我来帮你搞定这个需求!要从example.json里提取关联name、role的bar、baz字段,还要包含名为this的对象名称并输出标准CSV,用jq就能轻松实现。
基础实现命令
假设你的JSON是顶级数组结构(如果是嵌套结构,后面会说明调整方式),直接用这条命令:
jq -r ' # 筛选出name为"this"的对象 .[] | select(.name == "this") | # 把需要的字段打包成数组,转成CSV格式 [.name, .role, .bar, .baz] | @csv ' example.json
命令拆解说明
-r:让jq输出原始字符串(而非JSON格式的带引号字符串),确保CSV输出符合规范.[]:遍历JSON中的顶级数组元素(如果你的对象列表在嵌套键下,比如.data[],替换成对应路径即可)select(.name == "this"):精准筛选出名称为this的目标对象[.name, .role, .bar, .baz]:把需要的字段按顺序存入数组,方便后续转CSV@csv:jq内置过滤器,自动处理CSV的引号、特殊字符转义,输出标准CSV行
示例演示
比如你的example.json内容是:
[ { "name": "this", "role": "admin", "bar": "prod-value", "baz": "2024-05-20", "extra": "不需要的字段" }, { "name": "that", "role": "user", "bar": "test-value", "baz": "2024-05-19" } ]
运行命令后会输出:
"this","admin","prod-value","2024-05-20"
带表头的CSV输出
如果需要同时输出表头,调整命令即可:
jq -r ' # 先输出表头行 ["name", "role", "bar", "baz"] | @csv, # 再输出数据行 .[] | select(.name == "this") | [.name, .role, .bar, .baz] | @csv ' example.json
输出结果会包含表头:
"name","role","bar","baz" "this","admin","prod-value","2024-05-20"
内容的提问来源于stack exchange,提问作者thoth
相关产品推荐
相关产品推荐

