You need to enable JavaScript to run this app. 嵌套JSON可选字段提取及构建pandas DataFrame的实现方案
优惠活动
大模型
产品
解决方案
定价
更多

嵌套JSON可选字段提取及构建pandas DataFrame的实现方案

可选字段提取实现方案

原遍历逻辑存在两个核心问题:

  1. 逐字段触发append的写法,会导致可选字段缺失时,对应列表长度和其他列表不一致,后续转pandas DataFrame时会出现行错位、索引不对齐的问题
  2. 无键存在性校验,碰到fields列表里没有对应label的场景,循环走完都不会给对应列表补空值,甚至可能触发KeyError

实现思路

针对每个用户条目,先把该条目下所有fields按label整理成临时键值映射,再统一从映射中取需要的字段值,取不到就补None,保证每个条目处理完,所有目标列表同步追加一次值,长度完全对齐。

完整优化代码

# 初始化所有目标字段列表
names = []
genders = []
field_of_studies = []

for response in users:
    # 提前解析响应里的items字段,不存在则返回空列表,避免KeyError
    items = response.json().get("items", [])
    for item in items:
        # 构建当前用户的字段映射表:key为字段label,value为完整字段字典
        field_map = {}
        for field in item.get("fields", []):
            field_label = field.get("label")
            if field_label:
                field_map[field_label] = field

        # 提取姓名字段值
        name_target = field_map.get("Name and Surname")
        names.append(
            name_target["values"][0]["value"] 
            if (name_target and name_target.get("values")) 
            else None
        )

        # 提取性别字段值
        gender_target = field_map.get("Gender")
        gender_val = None
        if gender_target and gender_target.get("values"):
            value_body = gender_target["values"][0].get("value")
            if isinstance(value_body, dict):
                gender_val = value_body.get("text")
        genders.append(gender_val)

        # 提取可选的专业字段,不存在就补None
        study_target = field_map.get("Field of Studies")
        study_val = None
        if study_target and study_target.get("values"):
            value_body = study_target["values"][0].get("value")
            if isinstance(value_body, dict):
                study_val = value_body.get("text")
        field_of_studies.append(study_val)

方案优势

  • 数据完全对齐:每个用户条目处理完成后,三个列表都会追加1个值,最终三个列表长度完全一致,直接传给pandas就可以生成结构正确的DataFrame
  • 容错性强:所有取值场景都加了存在性判断,不管是缺整个字段、字段下无values、values下无有效value的情况,都会兜底返回None,不会触发代码运行报错
  • 扩展性好:后续要新增提取的字段时,只需要在取值部分加一段对应逻辑,不需要修改前面遍历fields的核心循环

额外优化:如果后续要提取的字段越来越多,可以把需要匹配的label、取值路径做成配置表,循环批量生成对应列表,不用反复写重复的判断逻辑。

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

相关产品推荐
方舟 Agent Plan

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

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