Python解析JSON全面指南:从入门到精通

一、JSON 基础操作

一、基础核心操作

1. 字典转JSON字符串

使用内置json.dumps()方法实现类型转换,支持多种参数优化:

import json
data = {"name": "Yant", "age": 25, "skills": ["Python", "数据分析"]}

# 基础转换
json_str = json.dumps(data)
# 优化显示(含中文支持+格式化)
formatted_str = json.dumps(data, ensure_ascii=False, indent=4)
print(formatted_str)

参数说明

  • ensure_ascii=False 禁用ASCII编码保留中文原貌
  • indent=4 生成带缩进的美观格式
  • 结果输出

    {
        "name": "Yant",
        "age": 25,
        "skills": [
            "Python",
            "数据分析"
        ]
    }
    

    2. 字典转JSON文件

    通过json.dump()实现持久化存储:

    with open('user.json', 'w', encoding='utf-8') as f:
        json.dump(data, f, ensure_ascii=False, indent=4)
        print(f.name)
    

    文件操作建议指定utf-8编码以避免乱码

    3. JSON文件转字典

    使用json.load()反向解析文件内容:

    with open('user.json', 'r', encoding='utf-8') as f:
        loaded_data = json.load(f)
    print(loaded_data['name'])  # 输出:Yant
    

    4. JSON字符串转字典

    通过json.loads()实现内存数据转换:

    json_str = '{"city": "北京", "population": 2154}'
    parsed_dict = json.loads(json_str)
    print(type(parsed_dict))  # <class 'dict'>
    

    二、进阶处理技巧

    1. 复杂对象序列化

    处理自定义类实例时扩展序列化方法:

    import json
    from datetime import datetime
    
    class User:
        def __init__(self, name, join_date):
            self.name = name
            self.join_date = join_date  # datetime对象
    
    def custom_encoder(obj):
        if isinstance(obj, User):
            return {"name": obj.name, "date": obj.join_date.isoformat()}
        raise TypeError
    
    user = User("Yant", datetime.now())
    json_str = json.dumps(user, default=custom_encoder)
    print(json_str)
    

    2. 异常处理机制

    try:
        json.loads('{"invalid": data}')
    except json.JSONDecodeError as e:
        print(f"错误位置:{e.pos},错误信息:{e.msg}")
    
    ## 异常输出
    错误位置:12,错误信息:Expecting value
    

    三、第三方库横向评测

    库名称 安装命令 速度 特点 适用场景
    ​orjson pip install orjson ⚡️最快 支持datetime类型,输出为字节流 大数据量/高频处理
    ​ujson pip install ujson 🚀快 兼容性好,接口与标准库一致 常规场景替代方案
    ​rapidjson pip install python-rapidjson 🏃♂️较快 支持SAX/DOM解析模式 流式数据处理
    ​simplejson pip install simplejson 🐢一般 支持旧版Python,功能最接近标准库 兼容性要求高环境

    性能实测数据​(处理10MB JSON):

  • orjson:序列化0.2s / 反序列化0.3s
  • ujson:序列化0.5s / 反序列化0.6s
  • json:序列化2.1s / 反序列化1.8s
  • 四、选型决策树

    1. ​基础需求 ➔ 内置json模块
    2. 高频大数据处理orjson(需处理字节转换)
    3. ​平衡需求ujson(兼容性好)或rapidjson(流式处理)
    4. ​历史项目维护simplejson(支持Python 2.x)

    五、避坑指南

    1. ​键名引号规范:JSON强制使用双引号,单引号会引发解析错误
    2. 浮点精度问题:建议使用decimal.Decimal处理财务数据
    3. 循环引用检测:自定义序列化时注意对象引用关系
    4. ​时区处理:建议统一转换为UTC时间存储

    作者:Yant224

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python解析JSON全面指南:从入门到精通

    发表回复