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

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

相关推荐
追逐时光者14 小时前
精选 4 款基于 .NET 开源、功能强大的 Windows 系统优化工具
后端·.net
TF男孩14 小时前
ARQ:一款低成本的消息队列,实现每秒万级吞吐
后端·python·消息队列
bobz96515 小时前
进程和线程结构体的统一和差异
面试
AAA修煤气灶刘哥16 小时前
别让Redis「歪脖子」!一次搞定数据倾斜与请求倾斜的捉妖记
redis·分布式·后端
AAA修煤气灶刘哥16 小时前
后端人速藏!数据库PD建模避坑指南
数据库·后端·mysql
你的人类朋友16 小时前
什么是API签名?
前端·后端·安全
昵称为空C18 小时前
SpringBoot3 http接口调用新方式RestClient + @HttpExchange像使用Feign一样调用
spring boot·后端
架构师沉默19 小时前
设计多租户 SaaS 系统,如何做到数据隔离 & 资源配额?
java·后端·架构
逛逛GitHub19 小时前
发现一个 AI 大模型服务质量榜单。
github
RoyLin19 小时前
TypeScript设计模式:适配器模式
前端·后端·node.js