You need to enable JavaScript to run this app. Python如何读取打印JSON文件中各国新冠新增病例数据
优惠活动
大模型
产品
解决方案
定价
更多

Python如何读取打印JSON文件中各国新冠新增病例数据

现有代码的核心问题

你目前没法顺利读到嵌套字段,根源是有个基础bug:你把json.load()加载后返回的结构化Python字典,通过json.dumps(data, indent=2)转成了格式化的纯文本字符串。字符串本身不支持用字典键做索引,后续你拿new_string['AFG']取值,本质上是对字符串做位置切片,根本拿不到结构化的字段内容。
要记住:json.load()读取本地JSON文件后,返回的就是可以直接做键值访问的字典结构,完全不需要额外转成字符串——转成字符串反而把原本可多层访问的结构化数据变成了纯文本,彻底失去了嵌套字段的访问能力。

对应问题的解决方法

1. 嵌套层级的取值语法

你预想的跨层级直接取值的逻辑Python本身就支持,不需要额外工具,只需要注意两个细节:

  • Python字典访问多层嵌套是连续使用方括号,不是用点号分隔(点号是JavaScript这类语言的写法)
  • 这个JSON的结构里,每个国家条目下的data字段是一个按时间顺序排列的列表,每个元素对应某一天的统计值,不是单个字典,所以取新增病例的时候需要先定位到列表里对应日期的元素,再读取new_cases键。

举个实际例子,如果要取阿富汗最早统计日的新增病例,写法是:

# 直接用json.load返回的原始字典操作,不要用dumps转成的字符串
afg_first_new_cases = data['AFG']['data'][0]['new_cases']

如果要取阿富汗最新一天的新增病例,直接取列表最后一个元素即可:

afg_latest_new_cases = data['AFG']['data'][-1]['new_cases']

2. 全量遍历所有国家的优化实现

完全不需要手动逐个敲国家代码——这个JSON的顶层字典,所有的键就是内置的国家/地区识别码,直接遍历字典的所有键值对,就能拿到全量国家的信息。以下是适配初学者的参考代码,全程用Python原生功能,不需要安装任何第三方工具:

import json

# 用with上下文管理器打开文件,不需要手动写f.close(),避免文件读取异常时句柄没释放
with open('covidData.json', 'r', encoding='utf-8') as f:
    raw_data = json.load(f)

# 遍历所有国家的条目
for country_code, country_info in raw_data.items():
    # 跳过没有实际日度统计的聚合条目(比如全球汇总、各大洲汇总)
    if 'data' not in country_info:
        continue
    # 拿到国家全称,避免输出只有看不懂的字母代码
    country_name = country_info['location']
    # 遍历当前国家所有的日度统计记录
    for daily_record in country_info['data']:
        # 跳过缺失新增病例值的日期,避免打印无意义的None
        if 'new_cases' in daily_record:
            print(f"国家:{country_name} | 日期:{daily_record['date']} | 当日新增病例:{daily_record['new_cases']}")

针对初学者的小提示

  • 用with语句处理文件是Python的标准写法,比手动open、close更稳妥,就算读取过程中报错也会自动关闭文件
  • 官方公开统计数据里部分日期、部分指标是缺测的,直接取值会打印无意义的None,加个键存在性判断就能过滤掉
  • 如果你不想打印全量历史数据,只需要看每个国家最新的统计值,只要把内层的日期循环删掉,直接取country_info['data'][-1]这最后一条记录就行,能大幅减少输出量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.04 01:54:07