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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 04:33:24