Skip to main content

cells-json

通用 JSON 序列化工具,提供 orjson 优先的高性能序列化能力,并补齐 Python 项目中常见的复杂类型处理需求。

🚀 核心特性

  • orjson 优先:默认使用 orjson 作为主后端,优先追求吞吐量和低延迟。
  • 极致性能:通过适配器模式和类型查找缓存,性能较标准库提升 3x - 10x。
  • 全量类型支持:原生支持 datetime、Decimal、UUID、Enum、Path、numpy、pandas、set、tuple 等。
  • 工业级异常体系:提供统一的 JSONEncodeError 和 JSONDecodeError,兼容标准库并保留完整上下文。
  • 多后端适配:保留 backend="json" 显式回退能力,适合需要标准库参数语义的场景。
  • 防御性设计:内置循环引用检测(支持标记字符串或严格报错)和显式参数控制。
  • 便捷工具:提供装饰器、基类和辅助函数简化日常开发。

📦 安装

pip install cells-json

💡 快速开始

1. 核心 API 导入

你可以直接从根包导入最常用的功能:

from cells.json import (
    safe_json_dumps,    # 安全序列化(推荐)
    dump, load,         # 文件流接口
    dumps, loads,       # 高性能适配器
    UniversalSerializer, # 核心转换器
    JSONEncodeError,    # 编码异常
    JSONDecodeError     # 解码异常
)

2. 通用序列化 (推荐)

safe_json_dumps 会自动处理常见复杂类型,并采用递归扫描以支持循环引用标记。

from datetime import datetime
from cells.json import safe_json_dumps

data = {
    "time": datetime.now(),
    "tags": {"python", "json"},
    "meta": {"version": "1.0"}
}

# 支持 indent 等标准参数
json_str = safe_json_dumps(data, indent=2)

3. 高性能模式

使用 dumps 和 loads 直接走 orjson 主路径。该接口默认统一返回 str 类型。

from cells.json import dumps, loads

# 默认优先使用 orjson
json_str = dumps({"key": "value"}, ensure_ascii=False)
obj = loads(json_str)

4. 标准库风格导入

如果你希望在工程里用 cells 统一替代标准库入口,可以直接这样写:

from cells import json

payload = json.dumps({"name": "alice"}, ensure_ascii=False)
data = json.loads(payload)

也支持实例化适配器:

from cells.json import JSONAdapter

json = JSONAdapter()
payload = json.dumps({"name": "alice"}, ensure_ascii=False)
data = json.loads(payload)

后端策略

cells.json 的接口形状接近标准库 json,但行为策略以增强能力为准,不承诺与标准库逐项等价。

  • 默认 backend="auto" 会优先使用 orjson。
  • orjson 能适配的参数会尽量适配。
  • 无法安全适配的标准库参数会直接报错,并提示显式指定 backend="json"。

例如:

from decimal import Decimal
from cells.json import dumps, loads

# orjson 主路径支持的参数
payload = dumps({"b": 1, "a": 2}, ensure_ascii=False, sort_keys=True, indent=2)

# 需要标准库解码钩子时,显式指定 json backend
data = loads("{\"value\": 1.25}", parse_float=Decimal, backend="json")

当前参数策略

  • sort_keys:在 orjson 主路径下已适配。
  • indent=2:在 orjson 主路径下已适配。
  • skipkeys=True:在 orjson 主路径下会先做键过滤,再编码。
  • separators=(",", ":"):在 orjson 主路径下已适配。
  • check_circular=False:在 orjson 主路径下接受,但不保证行为与标准库一致。
  • ensure_ascii=True、object_hook、parse_float、parse_int、parse_constant、object_pairs_hook、自定义 cls: 需要显式使用 backend="json"。

🔍 场景化指南 (QA)

场景 推荐方案 说明
标准库报不可序列化 safe_json_dumps(data) 自动转换 datetime/Decimal/UUID 等
遇到未知类型必须报错 UniversalSerializer(strict=True).dumps(data) 严格校验,防止脏数据入库
未知类型自动降级为空 UniversalSerializer(ignore_unknown=True).dumps(data) 无法处理的字段转为 null
存在循环引用 safe_json_dumps(data, fail_on_circular=False) 默认模式,返回 <CircularReference>
循环引用必须报错 safe_json_dumps(data, fail_on_circular=True) 抛出 CircularReferenceError
追求极致吞吐量 from cells.json import dumps 默认优先走 orjson 主路径
美化输出/美化日志 from cells.json.utils import prettify_json 带缩进和排序的格式化
需要标准库解析钩子 loads(data, parse_float=Decimal, backend="json") 显式切换到标准库后端

📊 性能基准 (Performance)

在 Python 3.13 环境下,对比标准库 json 的吞吐量表现:

场景 标准 json.dumps cells-json (Universal) 提升倍数
简单字典 (2k keys) ~5,800 ops/sec ~57,000 ops/sec ~10x
复杂对象 (500 entries) ~630 ops/sec ~2,100 ops/sec ~3.4x

注:测试包含类型缓存优化。复杂对象场景包含大量 DateTime、Decimal 和 UUID 的混合处理。

🛠️ 支持的数据类型

  • 日期时间: datetime, date, time (ISO 格式), timedelta (总秒数)。
  • 数值与标识: Decimal (float), UUID (str), Enum (value)。
  • 科学计算: numpy (ndarray/generic), pandas (DataFrame/Series)。
  • 容器: set, tuple (转换为 list)。
  • 自定义对象:
    • 优先尝试 to_dict() 方法。
    • 其次尝试 __dict__ 或 __slots__ 序列化。

⚠️ 异常处理

本库提供了一套完整的、与底层后端解耦的异常体系:

from cells.json import JSONEncodeError, JSONDecodeError, CircularReferenceError

try:
    payload = dumps(complex_obj)
except CircularReferenceError as e:
    print(f"检测到循环引用: {e.path}")
except JSONEncodeError as e:
    print(f"编码失败,对象类型: {e.obj_type}")

try:
    data = loads(invalid_str)
except JSONDecodeError as e:
    # 保留了标准库的错误位置信息
    print(f"解析失败 at pos {e.pos}: {e.msg}")

当 orjson 主路径不支持某个标准库参数时,会直接抛出 TypeError,并提示使用 backend="json"。

📂 辅助工具 (Utils)

如需使用以下辅助功能,请从 cells.json.utils 导入:

  • save_json(data, path) / load_json(path):快捷文件读写。
  • prettify_json(data):快速生成美化的 JSON 预览。
  • JsonSerializable 基类:继承后可使用 obj.to_json()。
  • @json_serializable 装饰器:为类动态注入 JSON 序列化能力。

📜 许可证

MPL-2.0

Metadata

Release files for cells-json 0.3.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for cells-json 0.3.2
File Size Uploaded
cells_json-0.3.2.tar.gz 21.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for cells-json 0.3.2
File Interpreter ABI Platform
cells_json-0.3.2-py3-none-any.whl Python 3 none any Details

Total release size: 36.8 kB

Release files / cells_json-0.3.2.tar.gz

Download URL cells_json-0.3.2.tar.gz
Size 21.6 kB
Tags Source
SHA-256 checksum
How to use checksums
0e2b398ab037147673d7184845f1615d2d427e4a4774211a27fc7bb13c28f89d
BLAKE2b-256 checksum
How to use checksums
92066ee65869c31d6854358744909d4584b0d6635caadbaacb24d3c57d855b3d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.7

Release files / cells_json-0.3.2-py3-none-any.whl

Download URL cells_json-0.3.2-py3-none-any.whl
Size 15.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4b74444c65562f790bf35854fea80153943597ef18424d716a6af66fb70ee2d4
BLAKE2b-256 checksum
How to use checksums
f8fdf10a33b8e04f2aeb553d3e243d373c029e83c52d996e596599438f56114a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.7

Release history Release notifications | RSS feed

This release

0.3.2 This release

2 release files

0.3.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page