如何用jq将JSON指定键的输出格式化为紧凑单行形式?
使用jq格式化指定JSON字段为紧凑形式
核心解决方案(优先推荐)
直接通过jq内置过滤器实现,仅将datapoints字段转为紧凑格式,同时保留其他字段的美化缩进:
jq '(.datapoints |= tojson) | fromjson' test.json
如果需要指定缩进空格数(比如2个空格,匹配jq默认美化格式),可添加--indent参数:
jq --indent 2 '(.datapoints |= tojson) | fromjson' test.json
命令说明
.datapoints |= tojson:把datapoints字段的嵌套数组转换为紧凑JSON字符串,去除所有换行与多余空格| fromjson:将整个JSON对象重新解析,此时其他字段会遵循jq默认的美化规则显示,而datapoints因从紧凑字符串生成,会保持单行紧凑格式
示例效果
假设test.json原始内容:
{ "target": "cpu_usage", "datapoints": [ [10.5, 1620000000], [12.3, 1620003600], [9.8, 1620007200] ] }
执行命令后输出:
{ "target": "cpu_usage", "datapoints": [[10.5,1620000000],[12.3,1620003600],[9.8,1620007200]] }
备选方案(标准Unix工具结合)
若环境限制无法使用jq高级过滤,可结合jq与sed实现,但该方法依赖固定JSON格式,可靠性不如纯jq方案:
jq . test.json | sed '/"datapoints": \[/,/\]/ { /"datapoints": \[/!{ /\]/!s/^ *//; s/, *$/,/ }; /\]/s/^ *// }'
内容的提问来源于stack exchange,提问作者Prateek
相关产品推荐
相关产品推荐

