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

1,400 阅读3分钟

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库:简单易用,适合大多数场景

代码示例

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

代码示例

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格式,适合配置文件

安装

pip install json5

代码示例

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

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