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

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

相关推荐
野犬寒鸦16 分钟前
从零起步学习并发编程 || 第一章:初步认识进程与线程
java·服务器·后端·学习
我爱娃哈哈21 分钟前
SpringBoot + Flowable + 自定义节点:可视化工作流引擎,支持请假、报销、审批全场景
java·spring boot·后端
李梨同学丶2 小时前
0201好虫子周刊
后端
思想在飞肢体在追2 小时前
Springboot项目配置Nacos
java·spring boot·后端·nacos
cyforkk3 小时前
09、Java 基础硬核复习:异常处理(容错机制)的核心逻辑与面试考点
java·数据库·面试
知识即是力量ol3 小时前
研发实战:Git 规范化开发全流程指南
git·gitee·github
知识即是力量ol5 小时前
Git 快速入门 (实习生视角)
git·gitee·github
Loo国昌5 小时前
【垂类模型数据工程】第四阶段:高性能 Embedding 实战:从双编码器架构到 InfoNCE 损失函数详解
人工智能·后端·深度学习·自然语言处理·架构·transformer·embedding
ONE_PUNCH_Ge6 小时前
Go 语言泛型
开发语言·后端·golang
Warren986 小时前
Pytest Fixture 作用域详解:Function、Class、Module、Session 怎么选
面试·职场和发展·单元测试·pytest·pip·模块测试·jira