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库。

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

相关推荐
考虑考虑4 小时前
数据库中的EXISTS
运维·数据库·后端
找方案4 小时前
AI+人力资源:AI招聘面试的兴起与争议
人工智能·面试·职场和发展
郑州光合科技余经理5 小时前
国际版外卖系统:税率字段怎么和订单主流程解耦
android·java·开发语言·前端·后端·php·ai编程
毅炼5 小时前
Rover-Suite 开源发布:轻量服务注册中心与网关一体化方案
java·后端·系统架构·gateway
蚕豆糯米饭7 小时前
Github Copilot 研发效能提升实战指南
ai·github·copilot·ai编程
AlfredZhao9 小时前
GitHub 克隆他人私有仓库:从授权到下载
github
智能制造产品经理代码提升9 小时前
Windows Git 多 GitHub 账号切换(GCM 管理凭据,不覆盖原有账号)
github
苏三说技术9 小时前
为什么越来越多人用OpenWiki?
后端
IT_陈寒9 小时前
Java里用Stream.parallel()翻车实录,这性能还不如单线程
前端·人工智能·后端
Bs_MoneyMagnet10 小时前
基于springboot+vue的生态果园采摘预约系统的设计与实现 源码+文档
java·vue.js·spring boot·后端·毕业设计·计算机毕业设计