apppublic/aidocs/jsonIO.md
2025-10-05 11:23:33 +08:00

217 lines
6.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 技术文档JSON 编码与解码工具模块
本模块提供了一组用于处理 Python 数据结构的 JSON 序列化与反序列化工具函数,支持 Unicode 转换、统一编码处理以及标准化的响应格式封装。
---
## 目录
- [功能概述](#功能概述)
- [函数说明](#函数说明)
- [`uni_str(a, encoding)`](#uni_stra-encoding)
- [`success(data)`](#successdata)
- [`error(errors)`](#errorerrors)
- [`jsonEncode(data, encode='utf-8')`](#jsonencodedata-encodeutf-8)
- [`jsonDecode(jsonstring)`](#jsondecodejsonstring)
- [使用示例](#使用示例)
- [注意事项](#注意事项)
---
## 功能概述
该模块主要实现以下功能:
1. **统一字符串编码转换**`uni_str`):将任意嵌套数据结构中的字符串递归转换为 Unicode 字符串Python 2 环境下),确保编码一致性。
2. **标准响应构造**:提供 `success()``error()` 函数以返回统一格式的成功/错误响应对象。
3. **安全的 JSON 序列化与反序列化**:通过 `jsonEncode``jsonDecode` 实现对复杂数据类型的兼容性处理。
> ⚠️ 注意:此代码适用于 **Python 2** 环境(使用了 `unicode` 类型)。在 Python 3 中需进行相应调整。
---
## 函数说明
### `uni_str(a, encoding)`
递归地将输入数据结构中所有字符串转换为指定编码的 Unicode 字符串。
#### 参数
| 参数 | 类型 | 描述 |
|------|------|------|
| `a` | 任意类型 | 输入的数据对象(如 str、dict、list、bool 等) |
| `encoding` | str | 字符串编码方式,默认通常为 `'utf-8'` |
#### 返回值
返回一个与输入结构相同但所有字符串均为 Unicode 类型的对象。
#### 处理逻辑
| 输入类型 | 处理方式 |
|---------|----------|
| `None` | 返回 `None` |
| `list``tuple` | 遍历每个元素并递归调用 `uni_str`,返回新列表或元组 |
| `dict` | 遍历键值对,分别对键和值递归处理,返回新字典 |
| `bool` | 直接返回原值(不转换) |
| `unicode` | 已是 Unicode直接返回 |
| `str` 或具有 `__str__` 方法的对象 | 调用 `str()` 并使用指定编码解码为 `unicode` |
| 其他类型int、float 等) | 直接返回原值 |
#### 示例
```python
uni_str("hello", "utf-8") # 输出: u'hello'
uni_str({"name": "张三"}, "utf-8") # 输出: {u'name': u'\u5f20\u4e09'}
```
---
### `success(data)`
构造一个表示操作成功的标准响应对象。
#### 参数
| 参数 | 类型 | 描述 |
|------|------|------|
| `data` | 任意可序列化对象 | 成功时返回的数据内容 |
#### 返回值
```json
{
"success": true,
"data": data
}
```
#### 示例
```python
success({"id": 1, "name": "Alice"})
# 输出: {'success': True, 'data': {'id': 1, 'name': 'Alice'}}
```
---
### `error(errors)`
构造一个表示操作失败的标准错误响应对象。
#### 参数
| 参数 | 类型 | 描述 |
|------|------|------|
| `errors` | list/dict/str | 错误信息,可以是字符串、列表或字典形式的错误描述 |
#### 返回值
```json
{
"success": false,
"errors": errors
}
```
#### 示例
```python
error("用户名不能为空")
# 输出: {'success': False, 'errors': '用户名不能为空'}
error(["字段A无效", "字段B缺失"])
# 输出: {'success': False, 'errors': ['字段A无效', '字段B缺失']}
```
---
### `jsonEncode(data, encode='utf-8')`
将任意 Python 对象安全地编码为 JSON 字符串。
#### 参数
| 参数 | 类型 | 描述 |
|------|------|------|
| `data` | 任意对象 | 待序列化的数据 |
| `encode` | str | 编码格式,默认为 `'utf-8'` |
#### 流程
1. 使用 `uni_str(data, encode)` 将所有字符串转换为 Unicode。
2. 使用 `json.dumps()` 将处理后的数据序列化为 JSON 字符串。
#### 返回值
- 类型:`str`
- 内容:合法的 JSON 格式字符串
#### 示例
```python
jsonEncode({"msg": "你好世界"})
# 输出: '{"msg": "\\u4f60\\u597d\\u4e16\\u754c"}'
```
---
### `jsonDecode(jsonstring)`
将 JSON 字符串解析为 Python 对象。
#### 参数
| 参数 | 类型 | 描述 |
|------|------|------|
| `jsonstring` | str | 合法的 JSON 字符串 |
#### 返回值
- 解析后的 Python 对象dict、list、str、int 等)
#### 异常处理
- 若输入不是合法 JSON会抛出 `ValueError`(由 `json.loads` 抛出)
#### 示例
```python
jsonDecode('{"name": "Bob", "age": 30}')
# 输出: {u'name': u'Bob', u'age': 30}
```
---
## 使用示例
```python
# 构造成功响应并编码为 JSON
response = success({"user_id": 123, "username": "test_user"})
json_str = jsonEncode(response)
print(json_str)
# 输出: {"success": true, "data": {"user_id": 123, "username": "test_user"}}
# 解码 JSON 字符串
decoded = jsonDecode(json_str)
print(decoded['data']['username']) # 输出: test_user
# 构造错误响应
err_resp = error(["密码太短", "邮箱格式错误"])
err_json = jsonEncode(err_resp)
print(err_json)
# 输出: {"success": false, "errors": ["密码太短", "邮箱格式错误"]}
```
---
## 注意事项
1. **Python 版本兼容性**
- 此代码基于 **Python 2** 设计(依赖 `unicode` 类型)。
-**Python 3** 中,`unicode` 应替换为 `str``str` 替换为 `bytes`,建议重写以适配 Python 3 的字符串模型。
2. **性能考虑**
- `uni_str` 是递归函数,对于深度嵌套或大型数据结构可能影响性能。
- 建议仅在必要时使用,或考虑缓存机制优化。
3. **安全性**
- `jsonDecode` 不做额外校验,请确保输入来源可信,防止注入攻击。
4. **编码假设**
- 所有字符串预期使用 UTF-8 编码。若传入其他编码(如 GBK需确保数据真实编码匹配。
5. **对象方法调用风险**
-`uni_str` 中调用了 `getattr(a, '__str__')` 并执行 `str(a)`,应确保对象的 `__str__` 方法无副作用。
---
## 版本信息
- 兼容环境Python 2.x
- 依赖库:`json`(标准库)
> ✅ 推荐用于需要统一响应格式与编码处理的传统 Web API 后端项目(如 Django 1.x / Flask 配合 Python 2