• TypeError: datetime.datetime(2016, 9, 25, 21, 12, 19, 135649) is not JSON serializable解决办法(json无法序列化对象的解决办法)


    1.一个简单的方法来修补json模块,这样序列将支持日期时间。

            import json
            import datetime
    
            json.JSONEncoder.default = lambda self, obj: (obj.isoformat() if isinstance(obj, datetime.datetime) else None)
            
    
            result = json.dumps(ret)
            print(result)
    

      

    [{"date": "2016-09-25T21:12:19.135649", "id": 16}]
    

    2.该模块为您提供了一个默认的编码器:json.JSONEncoder您需要扩展这个提供您的实现default方法序列化对象。

            import json
            import datetime
            from time import mktime
            #
            # class MyEncoder(json.JSONEncoder):
            #     def default(self, obj):
            #         if isinstance(obj, datetime.datetime):
            #             return str(mktime(obj.timetuple()))
            #
            #         return json.JSONEncoder.default(self, obj)
            # result = json.dumps(ret, cls = MyEncoder)
    

      

    [{"date": "1474809139.0", "id": 16}]
    

      

    方法3:我最喜欢的, 同时可以更好的应用于tornado的序列格式化

     

    解决办法:

    from decimal import Decimal
    import datetime, json
    
    class ComplexEncoder(json.JSONEncoder):
        def default(self, obj):
            if isinstance(obj, datetime.datetime):
                return obj.strftime("%Y-%m-%d %H:%M:%S")
            elif isinstance(obj, Decimal):
                return str(obj)
            else:
                # return json.JSONEncoder.default(self, obj)
           return str(obj) # 根据需求进行修改
    if __name__ == '__main__': data = [{"ProjectName": "测试", "UserID": datetime.datetime.now(), "ProjectCreateTime": "2017-12-18 15:15", "ProjectPublic": "1", "ProjectOrgan": Decimal(12323)}] print(data) print(json.dumps(data, cls=ComplexEncoder, ensure_ascii=False))

                res = SelectProInfor(UserID)
                for i in res:
                    print(i)
                    for k, va in i.items():
                        if isinstance(va, decimal.Decimal):
                            i[k] = str(va)
                        if isinstance(va, object):
                            i[k] = str(va)
  • 相关阅读:
    使用T4模板生成POCO类
    MiniProfiler工具介绍
    程序集和反射(C#)
    按自己的想法去理解事件和泛型(C#)
    WebAPI性能优化之压缩解压
    那些年困扰我们的委托(C#)
    HTML5笔记2——HTML5音/视频标签详解
    HTML5笔记1——HTML5的发展史及标签的改变
    工作中常用的js、jquery自定义扩展函数代码片段
    记一次.NET代码重构
  • 原文地址:https://www.cnblogs.com/renfanzi/p/5907115.html
Copyright © 2020-2023  润新知