如何使用jq将JSON中指定值与另一数组的每个元素组合输出TSV
jq实现JSON转指定配对格式输出方案
实现命令
针对给出的JSON结构,直接使用如下jq命令即可得到符合TSV规范的输出:
jq -r '.[] | [.id, .names[]] | @tsv' input.json
如果JSON内容是通过管道传入的,直接去掉末尾的input.json即可接收标准输入流处理。
命令逻辑拆解
-r:开启原始输出模式,禁止jq自动给字符串值包裹双引号,直接输出纯文本内容.[]:遍历最外层JSON数组的每一个子对象[.id, .names[]]:为每个遍历到的子对象构造新的一维数组:第一个元素是当前对象的id字段值,后续依次展开names数组的所有元素填入数组@tsv:调用jq内置的TSV格式化过滤器,自动将数组元素用制表符分隔拼接为单行字符串输出
格式适配说明
如果需要输出id和名称之间用单个空格分隔(和示例展示的视觉效果完全一致),可以使用如下变体命令:
jq -r '.[] | .id as $curId | .names[] | "\($curId) \(.)"' input.json
运行后输出结果和示例完全匹配:
1 apple 1 google 2 iphone 2 ipad 2 macbook
内容的提问来源于stack exchange,提问作者LeonL.
相关产品推荐
相关产品推荐

