mirror of
https://github.com/deepmodeling/Uni-Lab-OS
synced 2026-04-24 13:56:28 +00:00
56 lines
2.1 KiB
Python
56 lines
2.1 KiB
Python
import json
|
||
|
||
from unilabos.utils.type_check import TypeEncoder, json_default
|
||
|
||
try:
|
||
import orjson
|
||
|
||
def fast_dumps(obj, **kwargs) -> bytes:
|
||
"""JSON 序列化为 bytes,优先使用 orjson。"""
|
||
return orjson.dumps(obj, option=orjson.OPT_NON_STR_KEYS, default=json_default)
|
||
|
||
def fast_dumps_pretty(obj, **kwargs) -> bytes:
|
||
"""JSON 序列化为 bytes(带缩进),优先使用 orjson。"""
|
||
return orjson.dumps(
|
||
obj,
|
||
option=orjson.OPT_NON_STR_KEYS | orjson.OPT_INDENT_2,
|
||
default=json_default,
|
||
)
|
||
|
||
def fast_loads(data) -> dict:
|
||
"""JSON 反序列化,优先使用 orjson。接受 str / bytes。"""
|
||
return orjson.loads(data)
|
||
|
||
def fast_dumps_str(obj, **kwargs) -> str:
|
||
"""JSON 序列化为 str,优先使用 orjson。用于需要 str 而非 bytes 的场景(如 ROS msg)。"""
|
||
return orjson.dumps(obj, option=orjson.OPT_NON_STR_KEYS, default=json_default).decode("utf-8")
|
||
|
||
def normalize_json(info: dict) -> dict:
|
||
"""经 JSON 序列化/反序列化一轮来清理非标准类型。"""
|
||
return orjson.loads(orjson.dumps(info, default=json_default))
|
||
|
||
except ImportError:
|
||
|
||
def fast_dumps(obj, **kwargs) -> bytes: # type: ignore[misc]
|
||
return json.dumps(obj, ensure_ascii=False, cls=TypeEncoder).encode("utf-8")
|
||
|
||
def fast_dumps_pretty(obj, **kwargs) -> bytes: # type: ignore[misc]
|
||
return json.dumps(obj, indent=2, ensure_ascii=False, cls=TypeEncoder).encode("utf-8")
|
||
|
||
def fast_loads(data) -> dict: # type: ignore[misc]
|
||
if isinstance(data, bytes):
|
||
data = data.decode("utf-8")
|
||
return json.loads(data)
|
||
|
||
def fast_dumps_str(obj, **kwargs) -> str: # type: ignore[misc]
|
||
return json.dumps(obj, ensure_ascii=False, cls=TypeEncoder)
|
||
|
||
def normalize_json(info: dict) -> dict: # type: ignore[misc]
|
||
return json.loads(json.dumps(info, ensure_ascii=False, cls=TypeEncoder))
|
||
|
||
|
||
# 辅助函数:将UUID数组转换为字符串
|
||
def uuid_to_str(uuid_array) -> str:
|
||
"""将UUID字节数组转换为十六进制字符串"""
|
||
return "".join(format(byte, "02x") for byte in uuid_array)
|