如何用Python处理JSON嵌套结构—json_normalize平铺技巧

星夢妙者
发布: 2025-07-11 11:16:02
原创
993人浏览过

json_normalize 是 pandas 用于处理嵌套 json 数据的工具。1. 理解嵌套 json 结构,如包含字典和列表的多层结构;2. 使用 json_normalize 可将嵌套数据拍平成表格形式,地址字段通过点号路径展开;3. 利用 explode 展开列表字段,每个元素单独一行,或合并为字符串显示;4. 处理复杂嵌套时可通过 record_path 指定路径提取深层字段,结合 max_level 控制展开层级。

如何用Python处理JSON嵌套结构—json_normalize平铺技巧

处理JSON嵌套结构在Python中是一个常见的任务,尤其是在从API获取数据时。json_normalizepandas 提供的一个非常实用的工具,能将嵌套的 JSON 数据“拍平”成表格形式,方便后续分析。

如何用Python处理JSON嵌套结构—json_normalize平铺技巧

1. 理解什么是嵌套JSON

在实际工作中,我们经常遇到类似如下的结构:

data = [
    {
        "id": 1,
        "name": "Alice",
        "address": {
            "city": "Beijing",
            "zip": "100000"
        },
        "hobbies": ["reading", "cycling"]
    },
    {
        "id": 2,
        "name": "Bob",
        "address": {
            "city": "Shanghai",
            "zip": "200000"
        },
        "hobbies": ["gaming"]
    }
]
登录后复制

这个结构中包含了字典嵌套和列表,直接用 pd.DataFrame(data) 处理的话,有些字段还是嵌套的,不方便查看和分析。

立即学习Python免费学习笔记(深入)”;

如何用Python处理JSON嵌套结构—json_normalize平铺技巧

2. 使用 json_normalize 基础用法

pandas.json_normalize() 的基本作用就是把嵌套结构展开成列。你可以这样使用它:

import pandas as pd

df = pd.json_normalize(data)
print(df)
登录后复制

输出结果会是这样的 DataFrame:

如何用Python处理JSON嵌套结构—json_normalize平铺技巧
id name address.city address.zip hobbies
1 Alice Beijing 100000 [reading, cycling]
2 Bob Shanghai 200000 [gaming]

这样地址信息就被“平铺”出来了。

提示:

  • 如果你只想要某些字段,可以加 record_path 参数指定路径。
  • 想要展开列表类型字段(比如 hobbies),可以结合 max_level=1 或者使用 explode

3. 展开列表字段的技巧

上面的例子中,hobbies 字段是列表,如果我们想把每个爱好单独一行,可以用 explode

ImagetoCartoon
ImagetoCartoon

一款在线AI漫画家,可以将人脸转换成卡通或动漫风格的图像。

ImagetoCartoon 106
查看详情 ImagetoCartoon
df = df.explode("hobbies")
登录后复制

这样原来的一行可能会变成多行,例如 Alice 就会有两行记录,分别对应 reading 和 cycling。

如果你希望保留原始结构但又不想丢掉列表中的多个值,也可以考虑把这些值合并成字符串:

df["hobbies"] = df["hobbies"].apply(lambda x: ", ".join(x))
登录后复制

这样显示更直观,适合展示类用途。


4. 更复杂的嵌套怎么处理?

当结构更深的时候,比如:

{
    "user": {
        "profile": {
            "name": "Charlie",
            "contact": {
                "email": "charlie@example.com",
                "phone": "123456789"
            }
        }
    }
}
登录后复制

你可以通过点号表示法访问深层字段:

pd.json_normalize(data, max_level=10)
登录后复制

或者指定字段路径:

df = pd.json_normalize(
    data,
    record_path=["user", "profile"],
    meta=[["user", "profile", "contact", "email"]]
)
登录后复制

不过一般建议先用 max_level 试试看效果,再根据需要提取特定字段。


总的来说,json_normalize 虽然功能强大,但也不是万能的,有时候需要配合 applyexploderename 等操作一起使用。关键是理解原始结构,并有意识地控制输出格式。

基本上就这些,不复杂但容易忽略细节的地方在于字段路径和层级结构的匹配,稍不小心就会出错。

以上就是如何用Python处理JSON嵌套结构—json_normalize平铺技巧的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号