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

如何解析嵌套JSON API响应并转换为表格格式

解决方案

1. 先提取目标数据数组

首先从API响应中精准抽出result.records数组,这是后续处理的核心数据源:

import pandas as pd
import json

# 假设API响应已加载为json对象(或从本地文件读取)
with open('boston_gov_data.json', 'r') as f:
    raw_data = json.load(f)

# 提取需要处理的records数组
target_records = raw_data['result']['records']

2. 正确使用json_normalize处理嵌套结构

之前两次使用未达预期,大概率是参数配置问题。根据嵌套类型选择对应用法:

场景A:嵌套字段为字典对象

如果每条record包含层级字典(如contact_info),直接调用json_normalize会自动展开第一层嵌套,生成带.分隔符的列名:

# 自动展开所有层级嵌套(默认行为)
df = pd.json_normalize(target_records)

# 若需限制展开层级,指定max_level参数
# df = pd.json_normalize(target_records, max_level=1)

场景B:嵌套字段为数组列表

如果record包含数组型嵌套(如related_permits),需通过record_path指定展开的数组路径,并用meta保留顶层字段:

# 展开nested_array字段,同时保留顶层的id和name字段
df = pd.json_normalize(
    target_records,
    record_path='nested_array',  # 要展开的数组字段名
    meta=['id', 'name']          # 需保留的顶层字段
)

3. 用flatten_json正确扁平化(修正之前的错误)

之前得到1行多列的问题,是因为你直接扁平化了整个records数组,而非遍历每条record单独扁平化。正确用法:

from flatten_json import flatten

# 遍历每条record,单独扁平化后生成新列表
flattened_records = [flatten(record) for record in target_records]
df = pd.DataFrame(flattened_records)

此方法会将所有深层嵌套字段展开为parent_child格式的列名,每条record对应DataFrame的一行。

4. 自定义递归扁平化(灵活控制格式)

如果需要自定义列名分隔符或处理特殊嵌套(如数组内的对象),可编写递归函数:

def flatten_record(record, parent_key='', sep='_'):
    flattened = {}
    for key, value in record.items():
        new_key = f"{parent_key}{sep}{key}" if parent_key else key
        if isinstance(value, dict):
            # 递归处理字典类型的嵌套
            flattened.update(flatten_record(value, new_key, sep))
        elif isinstance(value, list):
            # 数组处理:可选转为字符串,或进一步展开数组内的对象
            flattened[new_key] = str(value)
            # 若需展开数组内的对象,替换为以下代码:
            # for idx, item in enumerate(value):
            #     flattened.update(flatten_record(item, f"{new_key}_{idx}", sep))
        else:
            flattened[new_key] = value
    return flattened

# 应用到所有record
flattened_records = [flatten_record(rec) for rec in target_records]
df = pd.DataFrame(flattened_records)

验证输出

最后检查DataFrame结构,确认每条原始record对应一行,嵌套字段均展开为独立列:

print(df.head())
print("列名列表:", df.columns.tolist())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 17:40:46