You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将混合numpy与Python类型的嵌套对象转换为JSON兼容原生Python类型

混合Python与numpy类型的深层嵌套对象原生类型转换方案

实现思路

递归遍历嵌套对象的所有层级,针对不同类型做对应转换,全程在内存中完成,无需额外的JSON序列化/反序列化往返操作:

  • 支持dict、list、tuple等常见Python容器类型的递归遍历
  • numpy标量(如np.int64、np.float32、np.bool_等)调用.item()转为原生Python标量
  • numpy数组调用.tolist()转为列表后再递归处理内部元素
  • 原生Python类型直接返回,不做多余处理

完整实现代码

import numpy as np
from collections.abc import Mapping, Iterable

def numpy_to_native(obj):
    # 处理numpy标量类型
    if isinstance(obj, np.generic):
        return obj.item()
    # 处理numpy数组类型
    elif isinstance(obj, np.ndarray):
        return numpy_to_native(obj.tolist())
    # 处理字典类容器
    elif isinstance(obj, Mapping):
        return {key: numpy_to_native(value) for key, value in obj.items()}
    # 处理可迭代非字符串/字节类容器(列表、元组等)
    elif isinstance(obj, Iterable) and not isinstance(obj, (str, bytes)):
        return [numpy_to_native(item) for item in obj]
    # 其他原生Python类型直接返回
    else:
        return obj

使用示例

# 测试用深层混合类型对象
test_obj = {
    "level1": {
        "numpy_int": np.int64(2024),
        "numpy_array": np.array([1, 2, np.float32(3.1415)]),
        "nested_list": [np.bool_(False), "原生字符串", 789, (np.uint8(255), 101112)]
    }
}

# 转换后得到全原生Python类型对象
native_obj = numpy_to_native(test_obj)
# 转换后的对象可直接传入任意标准json.dumps方法使用

方案优势

  • 性能优于两次JSON往返的方案,所有转换操作仅在内存中完成
  • 全递归实现,支持任意深度的嵌套结构,numpy类型无论出现在哪一层都能被正确转换
  • 不侵入现有序列化逻辑,转换产物完全兼容标准JSON序列化规则

内容的提问来源于stack exchange,提问作者Peter Cotton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 17:54:03