如何遍历反序列化后的JSON统计特定状态码的数量
统计JSON中各状态码的总数
解析与统计步骤
- 解析JSON数据:将API返回的JSON字符串(或响应对象)转换为Python字典。如果用
requests调用API,直接用response.json()即可;如果是字符串,用json.loads()解析。 - 提取目标列表:从字典中取出
results字段对应的数组,这是包含所有任务数据的集合。 - 统计状态频次:有两种规范的实现方式,按需选择:
代码实现
import json from collections import Counter # 示例JSON字符串(实际场景可替换为API响应解析结果) json_data = ''' { "results": [ { "accepted": true, "relevant_via_survey": true, "status": "TS1", "status_updated": "2022-09-30T05:57:27.675000-04:00", "task_id": "T178" }, { "accepted": true, "relevant_via_survey": true, "status": "TS2", "status_updated": null, "task_id": "T1213" }, { "accepted": true, "relevant_via_survey": true, "status": "TS1", "status_updated": null, "task_id": "T1188" }, { "accepted": true, "relevant_via_survey": true, "status": "TS2", "status_updated": null, "task_id": "T1177" }, { "accepted": true, "relevant_via_survey": true, "status": "TS1", "status_updated": null, "task_id": "T554" }, { "accepted": true, "relevant_via_survey": true, "status": "TS2", "status_updated": null, "task_id": "T1539" }, { "accepted": true, "relevant_via_survey": true, "status": "TS3", "status_updated": null, "task_id": "T106" }, { "accepted": true, "relevant_via_survey": true, "status": "TS2", "status_updated": null, "task_id": "T65" } ], "facets": {} } ''' # 1. 解析JSON为Python字典 data = json.loads(json_data) # 2. 提取results列表 tasks = data['results'] # 方法一:用Counter快速统计(推荐,简洁高效) status_counter = Counter(task['status'] for task in tasks) print("Counter统计结果:", status_counter) # 输出:Counter统计结果: Counter({'TS2': 4, 'TS1': 3, 'TS3': 1}) # 方法二:手动循环计数(适合理解逻辑) status_counts = {} for task in tasks: status = task['status'] status_counts[status] = status_counts.get(status, 0) + 1 print("手动统计结果:", status_counts) # 输出:手动统计结果: {'TS1': 3, 'TS2': 4, 'TS3': 1}
说明
- Counter方法:Python标准库
collections中的Counter是专门用于频次统计的工具,通过生成器表达式遍历所有任务的status字段,一行代码即可完成统计,是工业界常用的规范写法。 - 手动循环:通过字典的
get方法简化计数逻辑(get(status, 0)表示如果键不存在则返回0),适合新手理解统计的底层原理。
内容的提问来源于stack exchange,提问作者foggy
相关产品推荐
相关产品推荐

