首页/安全/渗透测试与安全评估速查/jq 处理 JSON 工具输出
工具使用要点60 条

jq 处理 JSON 工具输出

jq 把工具 JSON 输出转为统计与清单:筛选字段、聚合计数、导出表格;适合处理 httpx、nuclei 等批量结果。

为什么评估过程离不开 jq

现代评估工具的 JSON 输出动辄上万条记录,人工翻看没有意义。jq 是命令行 JSON 处理器:按字段筛选、按条件过滤、聚合计数、导出表格,把工具输出变成可以直接进报告或下一步流程的数据。它是评估流水线里的通用转换层。

基本信息

基础表达式.field 取字段、. [] 遍历数组、length 计数
筛选select(条件) 保留满足条件的记录
输出格式-r 去掉字符串引号、@tsv 制表符、@csv 逗号分隔
统计与 sort、uniq -c 组合做分布统计
安装多数发行版仓库直接提供,注意版本差异影响部分函数

典型使用场景

  • 从 httpx 结果里提取存活主机清单,供后续检测使用
  • 统计 nuclei 命中按等级与模板的分布,先看有没有异常集中
  • 把 JSON 转成 TSV 交给表格软件做人工复核
  • 对比两轮结果差异,找出新增与消失的条目
  • 从大体积日志中抽取指定字段,减小共享文件的敏感面

处理示例

处理示例
# 先摸清结构,再写筛选表达式
jq 'length' nuclei.json
jq 'keys' nuclei.json
# 提取 URL 列表
jq -r '.[].url' httpx.json | sort -u
# 按字段筛选并输出制表符格式,便于比对
jq -r 'select(.severity == "high") | [."template-id", .host] | @tsv' nuclei.json | sort | uniq -c
# 转 CSV 交给表格软件
jq -r '.[] | [.host, .port, .status] | @csv' scan.json > scan.csv

常用表达式读法

表达式作用易错点
.[]遍历数组元素对象上使用会报错
select(.x)保留字段存在的记录字段缺失时条件为假而非报错
length数组或对象长度字符串长度含义不同
@tsv 与 @csv结构化导出字段内含分隔符会错行
-r原始字符串输出漏写会带来多余引号
map 与 splits数组变换与拆分对 null 元素操作会报错
拿不准结构时先用 length 与 keys 探路,再逐步叠加管道:一次性写出长表达式,出错了很难定位是哪一段的问题;常用的表达式随手记进项目笔记,复测与同类项目可以直接复用。
不同工具与版本的字段名会变化:处理前先看一条真实记录再去写表达式。字段名不匹配时 jq 往往静默返回空结果而不是报错,把空结果当成无发现是最常见的一类误判,统计前先确认过滤条件确实能命中数据。

易错点

  • 忘记 -r 导致输出带引号,无法直接制表
  • 字段名与工具版本不匹配,得到空结果却当成无发现
  • 在共享文件里保留原始字段,未做敏感字段裁剪
  • 对超大文件反复全量解析,耗时且容易中断
  • 把 JSON 直接粘进报告附件,未做字段裁剪与脱敏

数据来源与参考

  • jq 官方手册(man jq)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌