Python中orjson、json、json5三大JSON库简单对比与实用教程

Python处理JSON数据常用的库有三个:内置的json库、性能超快的orjson库和支持更灵活语法的json5库。下面用最简单的语言帮你理解它们的区别、优缺点,并配上实用代码示例,方便你快速上手。

orjson、json、json5三者核心区别

特点 json(Python内置) orjson(高性能) json5(支持JSON5格式)
性能 较慢,纯Python实现,适合小数据量 非常快,C语言实现,序列化快10倍,反序列化快2倍 较慢,纯Python实现,性能最低
序列化结果 返回字符串(str) 返回字节(bytes),需手动转字符串 返回字符串(str)
支持数据类型 基本Python类型(dict、list、int等) 支持更多复杂类型(dataclass、datetime、numpy等) 支持JSON5扩展语法(注释、尾逗号、单引号等)
标准兼容性 严格遵守JSON标准(RFC 8259) 严格遵守JSON标准,不支持NaN和Infinity 支持JSON5扩展,允许注释、NaN、Infinity等
功能特点 内置,无需安装,简单易用 高性能,适合大数据和复杂类型处理 支持更灵活的JSON5格式,适合配置文件
缺点 性能较低,功能有限 返回bytes,没文件读写接口,需额外处理 性能慢,不适合性能敏感场景

1. Python内置json库:简单易用,适合大多数场景

代码示例

python 复制代码
import json

data = {"name": "张三", "age": 30, "is_student": False}

# 序列化为JSON字符串,indent=2美化格式,ensure_ascii=False支持中文
json_str = json.dumps(data, ensure_ascii=False, indent=2)
print(json_str)

# 反序列化回Python对象
data_back = json.loads(json_str)
print(data_back)

# 写入JSON文件
with open("data.json", "w", encoding="utf-8") as f:
    json.dump(data, f, ensure_ascii=False, indent=2)

# 从文件读取JSON
with open("data.json", "r", encoding="utf-8") as f:
    data_from_file = json.load(f)
print(data_from_file)

说明

  • 适合小到中等数据量。
  • 支持文件读写,API简单直观。
  • 性能一般,序列化大数据时较慢。

2. orjson库:超快JSON处理,适合大数据和复杂类型

安装

复制代码
bash
pip install orjson

代码示例

python 复制代码
import orjson
from datetime import datetime
from dataclasses import dataclass

data = {
    "name": "张三",
    "age": 30,
    "is_student": False,
    "created_at": datetime.now()
}

# 序列化,返回bytes类型
json_bytes = orjson.dumps(data)
print(json_bytes)  # b'{"name":"张三","age":30,"is_student":false,"created_at":"2025-04-15T12:00:00"}'

# 转成字符串方便查看
json_str = json_bytes.decode('utf-8')
print(json_str)

# 反序列化
data_back = orjson.loads(json_bytes)
print(data_back)

# 文件写入(注意用二进制模式)
with open("data.json", "wb") as f:
    f.write(orjson.dumps(data))

# 文件读取
with open("data.json", "rb") as f:
    data_from_file = orjson.loads(f.read())
print(data_from_file)

说明

  • 序列化速度比json快约10倍,反序列化快约2倍。
  • 支持datetimedataclassnumpy数组等复杂类型,自动转换。
  • 返回bytes,需要手动转换成字符串。
  • 不支持直接文件读写函数,需用Python文件操作配合。

3. json5库:支持更灵活的JSON5格式,适合配置文件

安装

bash 复制代码
pip install json5

代码示例

python 复制代码
import json5

json5_text = """
{
  // 这是注释
  unquotedKey: '单引号字符串',
  trailingComma: true, // 尾逗号允许
}
"""

# 解析JSON5字符串
data = json5.loads(json5_text)
print(data)

# 序列化为JSON5格式字符串
json5_str = json5.dumps(data, indent=2)
print(json5_str)

说明

  • 支持注释、尾逗号、单引号字符串、未加引号的键等JSON5特性。
  • 适合用作配置文件,写起来更灵活方便。
  • 性能较慢,不适合对速度要求高的场景。
  • API和标准json类似,容易上手。

总结建议

  • 追求性能和支持复杂数据类型 :用orjson,速度快,功能强大。
  • 普通JSON处理,兼容性好,简单易用 :用Python内置json库。
  • 需要灵活配置文件格式,支持注释和尾逗号 :用json5库。

如果你想要,我可以帮你写更详细的代码示例或性能测试对比。

相关推荐
007php00729 分钟前
某大厂跳动面试:计算机网络相关问题解析与总结
java·开发语言·学习·计算机网络·mysql·面试·职场和发展
你的人类朋友34 分钟前
先用js快速开发,后续引入ts是否是一个好的实践?
前端·javascript·后端
倔强青铜三39 分钟前
苦练Python第63天:零基础玩转TOML配置读写,tomllib模块实战
人工智能·python·面试
码事漫谈1 小时前
医疗设备控制系统中同步与异步通信的架构设计
后端
码事漫谈1 小时前
C++ 中 rfind 方法详解
后端
倔强青铜三1 小时前
苦练Python第62天:零基础玩转CSV文件读写,csv模块实战
人工智能·python·面试
AAA修煤气灶刘哥2 小时前
服务器指标多到“洪水泛滥”?试试InfluxDB?
数据库·后端·面试
晚风予星2 小时前
Repository Contribution Count Action:开源贡献者的专属统计神器
开源·github
uzong2 小时前
技术面试,时间不足15分钟,面试官就挂掉了电话,原因竟然是……
后端·面试