当前位置: 代码网 > it编程>前端脚本>Python > python3 json.dumps报错int64 is not JSON serializable怎么解决

python3 json.dumps报错int64 is not JSON serializable怎么解决

2026年09月23日 Python 我要评论
错误场景在使用json.dumps时,出现问题:typeerror: object of type int64 is not json serializable问题分析python3中没有int64这

错误场景

在使用json.dumps时,出现问题:

typeerror: object of type int64 is not json serializable

问题分析

  • python3中没有int64这个数据类型,所有的整型都是int
  • 报错里的int64指的是<class ‘numpy.int64’>,所以很有迷惑性
  • 同样的还会出现 typeerror: object of type float32/float64 is not json serializable

解决方案1

typeerror: object of type int64 is not json serializable

def default_dump(obj):
    """convert numpy classes to json serializable objects."""
    if isinstance(obj, (np.integer, np.floating, np.bool_)):
        return obj.item()
    elif isinstance(obj, np.ndarray):
        return obj.tolist()
    else:
        return obj
        
json.dumps(new_config,ensure_ascii=false, default=default_dump)

解决方案2

import json

class jsonencoder(json.jsonencoder):
    """convert numpy classes to json serializable objects."""

    def default(self, obj):
        if isinstance(obj, (np.integer, np.floating, np.bool_)):
            return obj.item()
        elif isinstance(obj, np.ndarray):
            return obj.tolist()
        else:
            return super(jsonencoder, self).default(obj)
        
json.dumps(new_config,ensure_ascii=false, cls=jsonencoder)

问题延伸:针对flask jsonify() 序列化错误

flask < 2.2

import datatime
from flask import flask as _flask
from flask.json import jsonencoder as _jsonencoder

class flaskjsonencoder(_jsonencoder):
    """重载flask的json encoder, 确保jsonfy()能解析numpy的json"""

    def default(self, obj):
        if isinstance(obj, (np.integer, np.floating, np.bool_)):
            return obj.item()
        elif isinstance(obj, np.ndarray):
            return obj.tolist()
        elif isinstance(obj, (datetime.datetime, datetime.timedelta)):
            return obj.__str__()
        else:
            return super(flaskjsonencoder, self).default(obj)

class flask(_flask):
    """重载flask的jsonencoder, 确保能解析numpy的json"""
    json_encoder = flaskjsonencoder
    
app = flask(__name__)

flask >= 2.2

import datatime
from flask import flask as _flask
from flask.json.provider import defaultjsonprovider, _default as flaskdefault
        
class flaskjsonprovider(defaultjsonprovider):
   """重载flask的json encoder, 确保jsonfy()能解析numpy的json"""
    
    @staticmethod
    def _default(obj):
        if isinstance(obj, (np.integer, np.floating, np.bool_)):
            return obj.item()
        elif isinstance(obj, np.ndarray):
            return obj.tolist()
        elif isinstance(obj, (datetime.datetime, datetime.timedelta)):
            return obj.__str__()
        else:
            return flaskdefault(obj)
	
	default = _default


class flask(_flask):
    """重载flask的json_provider_class, 确保能解析numpy的json"""
    json_provider_class = flaskjsonprovider
    
app = flask(__name__)

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com