84 lines
1.7 KiB
Markdown
84 lines
1.7 KiB
Markdown
# json-codec JSON 编解码器
|
|
|
|
提供插件间 JSON 数据的编码、解码和验证功能。
|
|
|
|
## 功能
|
|
|
|
- **JSON 编码**: Python 对象 → JSON 字符串
|
|
- **JSON 解码**: JSON 字符串 → Python 对象
|
|
- **Schema 验证**: 验证 JSON 数据结构
|
|
- **自定义类型**: 支持注册自定义类型编解码器
|
|
|
|
## 基本使用
|
|
|
|
```python
|
|
codec = plugin_mgr.get("json-codec")
|
|
|
|
# 编码
|
|
data = {"name": "test", "count": 42}
|
|
json_str = codec.encode(data)
|
|
# '{"name": "test", "count": 42}'
|
|
|
|
# 编码(格式化)
|
|
json_pretty = codec.encode(data, pretty=True)
|
|
# '{\n "name": "test",\n "count": 42\n}'
|
|
|
|
# 解码
|
|
parsed = codec.decode(json_str)
|
|
# {"name": "test", "count": 42}
|
|
```
|
|
|
|
## HTTP 响应处理
|
|
|
|
```python
|
|
# 在 http-api 插件中使用
|
|
router.get("/api/users", lambda req: Response(
|
|
status=200,
|
|
headers={"Content-Type": "application/json"},
|
|
body=codec.encode({"users": [...]})
|
|
))
|
|
```
|
|
|
|
## Schema 验证
|
|
|
|
```python
|
|
# 注册 schema
|
|
codec.register_schema("user", {
|
|
"type": "object",
|
|
"required": ["name", "email"],
|
|
"properties": {
|
|
"name": {"type": "string"},
|
|
"email": {"type": "string"},
|
|
"age": {"type": "number"}
|
|
}
|
|
})
|
|
|
|
# 验证数据
|
|
user_data = {"name": "test", "email": "test@example.com"}
|
|
is_valid = codec.validate(user_data, "user")
|
|
```
|
|
|
|
## 自定义类型
|
|
|
|
```python
|
|
from datetime import datetime
|
|
|
|
# 注册自定义编码器
|
|
codec.serializer.register_encoder(datetime, lambda dt: dt.isoformat())
|
|
|
|
# 使用
|
|
data = {"created_at": datetime.now()}
|
|
json_str = codec.encode(data)
|
|
```
|
|
|
|
## 错误处理
|
|
|
|
```python
|
|
from oss.plugin.types import JsonCodecError
|
|
|
|
try:
|
|
result = codec.decode("invalid json")
|
|
except JsonCodecError as e:
|
|
print(f"解码失败: {e}")
|
|
```
|