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
库。
如果你想要,我可以帮你写更详细的代码示例或性能测试对比。