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倍。
  • 支持datetime、dataclass、numpy数组等复杂类型,自动转换。
  • 返回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库。

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

相关推荐
Sakura_j_h_8 小时前
EasyEDA PCB 快速设计Skills
c++·python·github
学长毕设8 小时前
基于springboot的食品仓库管理系统
java·spring boot·后端
滴滴答答哒9 小时前
ASP.NET Core + FaceRecognitionDotNet 人脸识别实战:DI 单例、特征向量持久化与 1:N 比对
后端·asp.net
captain37611 小时前
MyBatis操作数据库(入门2)
java·数据库·spring boot·后端·spring·mybatis
wflynn11 小时前
GitHub 今日推荐|Edge0:让大号 MoE 模型在一台 Mac 上流式跑起来
python·开源·github
IT_陈寒12 小时前
Java序列化踩坑记:对象循环引用让我加班两小时
前端·人工智能·后端
每天进步一点点km12 小时前
自用-牛客网-华为机试编程模拟题1-python
华为od·华为·面试
泡海椒13 小时前
05-雷达图多维画像-信用评级多维画像
后端
王中阳Go13 小时前
5.27 分钟干完后端和全部测试:一场三小时笔试的五个失分点,四个不在代码上
大数据·数据库·人工智能·后端·大语言模型
大哥430913 小时前
Modbus 的"字序":一个配错就变成天文数字,或者干脆变成 0
后端