zoukankan      html  css  js  c++  java
  • Python的datetime与Decimal数据进行json序列化的简单说明

    我们在Python的json.JSONEncoder类中可以查看Python数据序列化为JSON格式的数据时数据类型的对应关系:

    class JSONEncoder(object):
        """Extensible JSON <http://json.org> encoder for Python data structures.
    
        Supports the following objects and types by default:
        +-------------------+---------------+
        | Python            | JSON          |
        +===================+===============+
        | dict              | object        |
        +-------------------+---------------+
        | list, tuple       | array         |
        +-------------------+---------------+
        | str               | string        |
        +-------------------+---------------+
        | int, float        | number        |
        +-------------------+---------------+
        | True              | true          |
        +-------------------+---------------+
        | False             | false         |
        +-------------------+---------------+
        | None              | null          |
        +-------------------+---------------+
        pass
        # 其他方法省略
    

    但是实际中我们也经常会遇到不能直接进行JSON序列化的Python数据,比如说datetimeDecimal类型的数据,这时就需要我们先把这两种格式的数据转换为Python的str,然后再进行JSON序列化操作。

    datetime类型数据的处理

    我们在进行json.dumps()操作的时候可以指定进行序列化的类:

    import json
    from datetime import datetime
    from datetime import date
    
    #对含有日期格式数据的json数据进行转换
    class JsonCustomEncoder(json.JSONEncoder):
        def default(self, field):
            if isinstance(field,datetime):
                return field.strftime('%Y-%m-%d %H:%M:%S')
            elif isinstance(field,date):
                return field.strftime('%Y-%m-%d')
            else:
                return json.JSONEncoder.default(self,field)
    
    
    d1 = datetime.now()
    
    dd = json.dumps(d1,cls=JsonCustomEncoder)
    print(dd)
    

    其实,本质上还是利用了strftime方法:

    from datetime import datetime
    i = datetime.strftime(i,'%Y-%m-%d')
    

    Decimal类型数据的处理

    对于Decimal类型的数据我们可以利用Python的decimal模块先将其转为str

    import decimal
    price = str(decimal.Decimal(price).quantize(decimal.Decimal('0.00')))
    

    然后把得到的结果再进行序列化即可。

  • 相关阅读:
    Java泛型-类型擦除
    static加载问题
    当使用System,out.println()打印一个对象是自动调用toString方法
    python——变量作用域及嵌套作用域
    Python 构造函数、 Python 析构函数、Python 垃圾回收机制
    python——type()创建类
    HTML4,HTML5,XHTML 之间有什么区别?
    斐波那契数列算法分析
    python——iterator迭代器|iterator详解——20140918|
    django model filter 条件过滤,及多表连接查询、反向查询,某字段的distinct
  • 原文地址:https://www.cnblogs.com/paulwhw/p/11532066.html
Copyright © 2011-2022 走看看