在 Python 中,处理 JSON 数据的库有多种选择,其中 json
和 orjson
是两个常见的选项。下面我们将介绍这两个库的主要差异,并通过示例代码帮助您更好地理解它们。
1. 性能
- orjson 是目前 Python 中最快的 JSON 库之一,尤其在处理大数据集时表现突出。它的序列化和反序列化速度通常比标准库
json
快 4.5 到 11.5 倍。 - json 是 Python 标准库的一部分,虽然不如
orjson
快,但使用简单,依赖少。
2. 数据类型支持
- orjson 支持更多的 Python 数据类型,如
dataclass
、datetime
、numpy
数组和UUID
实例[1][2][6]。 - json 需要通过
default
参数自定义序列化这些类型。
3. 输出格式
- orjson 默认输出为
bytes
,需要手动解码为str
,而 json 直接输出为str
。
4. JSON 规范遵守
- orjson 严格遵守 JSON 规范,不支持
NaN
、Infinity
等非标准值。 - json 允许这些非标准值。
5. 学习曲线和使用复杂度
- orjson 需要更多的学习和适应,因为它的行为与标准库有所不同。
- json 使用简单,直接替换现有代码。
示例代码
使用 json
python
import json
data = {"name": "John", "age": 30}
json_string = json.dumps(data)
print(json_string)
loaded_data = json.loads(json_string)
print(loaded_data)
使用 orjson
python
import orjson
data = {"name": "John", "age": 30}
json_bytes = orjson.dumps(data)
json_string = json_bytes.decode('utf-8')
print(json_string)
loaded_data = orjson.loads(json_string)
print(loaded_data)
处理 datetime
对象
python
import orjson
from datetime import datetime
data = {"name": "John", "timestamp": datetime.now()}
json_bytes = orjson.dumps(data)
json_string = json_bytes.decode('utf-8')
print(json_string)
loaded_data = orjson.loads(json_string)
print(loaded_data)
性能比较
以下是一个简单的性能比较示例:
python
import time
import json
import orjson
data = {"name": "John", "age": 30}
def benchmark(name, dumps, loads):
start = time.time()
for i in range(300000):
result = dumps(data)
if isinstance(result, bytes):
result = result.decode('utf-8')
loads(result)
print(f"{name}: {time.time() - start} seconds")
benchmark("Python", json.dumps, json.loads)
benchmark("orjson", lambda s: orjson.dumps(s).decode('utf-8'), orjson.loads)
这段代码会输出每个库处理大量数据的时间,通常 orjson
会更快。
总结
如果需要处理大量 JSON 数据且性能至关重要,orjson
是更好的选择。然而,如果项目依赖简单,使用标准库 json
也足够满足需求。