Python/Pandas遍历大型嵌套JSON 提取states节点name字段方法
多层嵌套JSON提取states层级name字段实现方案
针对三级嵌套的国家-行政区-城市结构JSON,提供两种可直接落地的实现方式,可根据文件大小和后续数据处理需求选择:
原生Python循环实现(内存友好,适配超大JSON文件)
如果你的JSON文件体积较大(数GB级别),优先用逐节点遍历的方式处理,避免全量加载导致内存溢出。
基础循环写法(适配内存可承载的文件)
import json state_names = [] # 读取文件 with open("your_data.json", "r", encoding="utf-8") as f: # 顶层是国家数组,直接加载为Python列表 country_list = json.load(f) # 第一层遍历:遍历所有国家节点 for country in country_list: # 容错:跳过没有states字段的异常国家记录 if "states" not in country: continue # 第二层遍历:遍历当前国家下的所有行政区节点 for state in country["states"]: # 容错:跳过没有name字段的异常行政区记录 if "name" in state: state_names.append(state["name"]) # 验证结果,输出示例值"Akkar Governorate" print(state_names[0])
超大文件流式写法(适配内存放不下的超大型JSON)
单文件超过内存容量时,用流式解析逐节点读取,内存占用极低:
import ijson state_names = [] with open("your_large_data.json", "rb") as f: # 直接匹配路径:顶层数组项 -> 国家节点的states数组 -> 每个行政区的name字段 for state_name in ijson.items(f, "item.states.item.name"): state_names.append(state_name)
Pandas实现方案(适配后续数据分析场景)
如果提取完数据需要做表格化统计、关联分析,不需要手写循环,直接用内置的打平函数即可一步拿到结构化结果:
import pandas as pd import json with open("your_data.json", "r", encoding="utf-8") as f: country_list = json.load(f) # 打平嵌套的states层级,自动解析所有行政区字段 # meta参数可指定需要保留的国家层级字段,比如国家名称、国家编码 df_state = pd.json_normalize( data=country_list, record_path="states", meta=["name", "iso2", "timezones"] # 按需填写要保留的上层字段即可 ) # 直接取name列就是所有行政区名称 all_state_names = df_state["name"] print(all_state_names.head())
注意事项
- 处理前建议先抽取1-2条样本打印字段结构,避免因为字段拼写差异(比如
state_name/Name这类命名区别)导致提取失败 - 所有写法都加了空值容错,不会因为单条脏数据中断整个提取流程
- 如果后续还要提取cities层级的数据,只需要在循环里加一层遍历,或者调整json_normalize的record_path到cities层级即可
注意:如果你的JSON顶层不是数组而是单个对象,把遍历路径里的
item替换成对应的根节点键名即可。
内容的提问来源于stack exchange,提问作者user18532875
相关产品推荐
相关产品推荐

