如何用jq将JSON中title数组的成对元素格式化输出为单行
解决JSON成对元素数组的单行输出问题
问题描述
我有一段包含facet_counts结构的JSON数据,其中facet_fields下的title数组由无标签的成对元素(如"primary",5981)组成。我希望将每对元素输出为单行,格式如:"primary",5981。目前使用命令jq -c '.facet_counts.facet_fields.title[]'时,数组的每个元素会被单独输出在一行,元素对被拆分,寻求正确的jq命令实现需求。
解决方案
可以使用jq的_nwise(2)过滤器将数组按每2个元素分组,再将每组格式化为目标样式:
方案1:用CSV格式直接输出
jq -r '.facet_counts.facet_fields.title | _nwise(2) | @csv'
命令说明
_nwise(2):把输入的一维数组按每2个元素为一组拆分,将["primary",5981,"secondary",345,...]转换为[["primary",5981],["secondary",345],...]@csv:将每组子数组转换成标准CSV格式字符串,正好匹配"primary",5981的单行输出需求-r:让jq输出原始字符串(避免额外的JSON格式引号包裹整行)
方案2:自定义格式拼接
如果需要更灵活的格式控制,也可以手动拼接字符串:
jq -r '.facet_counts.facet_fields.title | _nwise(2) | "\"\(.[0])\",\(.[1])"'
这个命令会直接生成"primary",5981格式的行,效果和CSV方案一致,但可按需调整分隔符或元素样式。
内容的提问来源于stack exchange,提问作者linux-guy1001
相关产品推荐
相关产品推荐

