如何用jq等Ubuntu默认工具将JSON数组按单行单元素输出到stdout
JSON数组逐元素单行输出实现方案
你需要的将JSON数组每个元素单独输出为单行JSON(JSON Lines格式,适配Grafana日志采集)的需求,可通过以下两种方式实现:
方案1:使用jq实现(最简洁,推荐)
jq是专业的命令行JSON处理工具,自带专门的紧凑输出参数,可直接实现需求:
- 若未安装jq,执行命令快速安装:
sudo apt update && sudo apt install -y jq
- 处理JSON文件/输入流的核心命令:
# 读取本地JSON文件处理 jq -c '.[]' your_vuln_list.json # 若JSON来自其他命令的输出,直接管道传递即可 # 例:漏洞扫描结果输出时可直接管道拼接处理
参数说明:
-c:启用紧凑输出模式,取消默认的缩进美化,每个JSON对象单独压缩为一行.[]:遍历输入JSON数组的每一个元素
执行后输出效果和你给出的期望格式完全一致,Grafana可直接识别解析。
方案2:使用Ubuntu默认自带工具(无需额外安装)
如果环境限制不能安装额外软件,可直接使用Ubuntu默认预装的Python3实现,无需依赖第三方包:
# 读取本地JSON文件 python3 -c "import sys, json; data = json.load(sys.stdin); [print(json.dumps(item, ensure_ascii=False)) for item in data]" < your_vuln_list.json # 管道传递输入的用法和jq一致
该命令逻辑为读取标准输入的JSON数组,遍历每个元素后序列化为无格式缩进的JSON字符串逐行打印,输出效果和jq方案完全一致。
注意:请勿使用sed、awk等纯文本切割工具处理JSON,当JSON字段中存在转义引号、嵌套结构、换行符等特殊内容时,纯文本处理很容易破坏JSON格式,导致Grafana解析失败,使用专用JSON解析工具稳定性更高。
内容的提问来源于stack exchange,提问作者Esben Eickhardt
相关产品推荐
相关产品推荐

