• 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')))
    

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

  • 相关阅读:
    IntelliJ IDEA设置JVM运行参数
    IntelliJ IDEA 乱码解决方案 (项目代码、控制台等)
    188.索引与视图
    187.数据库操作
    186.元素
    185.流程设计
    184.数据操纵语言DML
    改变linux shell前景色和背景色
    Centos文本方式安装情况下lvm分区的创建
    深入理解计算机系统第二版习题解答CSAPP 2.20
  • 原文地址:https://www.cnblogs.com/paulwhw/p/11532066.html
Copyright © 2020-2023  润新知