You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用jq高效统计JSON中的HTTP状态码出现次数?

使用jq统计HTTP状态码出现次数

直接用jq的reduce命令就能高效实现状态码计数,无需复杂循环语法,核心命令如下:

jq 'reduce .[] as $item ({}; .[$item.status|tostring] += 1)'

命令拆解

  • reduce .[] as $item:遍历输入JSON数组的每一个元素,将当前元素赋值给$item
  • ({}; ...):初始化一个空对象作为计数容器
  • .[$item.status|tostring] += 1:提取当前元素的status字段,转成字符串(jq对象键必须为字符串类型),对应键的计数加1

示例演示

输入JSON

[
  {"status": 200, "url": "example.com"},
  {"status": 301, "url": "google.com"},
  {"status": 403, "url": "forbidden.com"},
  {"status": 200, "url": "github.com"}
]

执行命令后输出

{
  "200": 2,
  "301": 1,
  "403": 1
}

可选:让输出键为数字类型

如果希望结果中的键是数字而非字符串,可以追加with_entries处理:

jq 'reduce .[] as $item ({}; .[$item.status|tostring] += 1) | with_entries(.key |= tonumber)'

对应的输出会变成:

{
  200: 2,
  301: 1,
  403: 1
}

对比Python等效实现

你提到的Python实现大概是这样:

import json
from collections import Counter

data = json.loads(input())
status_counts = Counter(item["status"] for item in data)
print(json.dumps(status_counts))

jq的实现和Python逻辑一致,但无需额外编写脚本,直接通过命令行就能完成,且处理大体积JSON时比bash循环高效得多——因为jq是一次性解析处理整个JSON结构,避免了bash循环中逐行处理、反复启动子进程的开销。

内容的提问来源于stack exchange,提问作者Elliot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 02:55:01