| 12345678910111213141516171819202122232425262728293031323334353637383940 |
- # -*- coding: utf-8 -*-
- """自定义 JSON 编码器。
- 按 ARCHITECTURE.md Phase 3 拆分建议,从 ``common/Utils.py`` 迁出。
- 类型:RULE FRAMEWORK(可由 AI 起草,必须人工维护)。
- 原位置:``common/Utils.py`` 第 87-102 行。
- ``common/Utils.py`` 仍 re-export ``MyEncoder``,老 import 不受影响。
- """
- from __future__ import absolute_import
- import json
- try:
- import numpy as np
- except ImportError: # pragma: no cover
- np = None
- __all__ = ["MyEncoder"]
- class MyEncoder(json.JSONEncoder):
- """支持 numpy ndarray / scalar / bytes 的 JSON 编码器。"""
- def __init__(self):
- import numpy as _np
- global np
- np = _np
- def default(self, obj):
- if isinstance(obj, np.ndarray):
- return obj.tolist()
- elif isinstance(obj, bytes):
- return str(obj, encoding='utf-8')
- elif isinstance(obj, (np.float_, np.float16, np.float32,
- np.float64)):
- return float(obj)
- elif isinstance(obj, (np.int64, np.int32)):
- return int(obj)
- return json.JSONEncoder.default(self, obj)
|