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

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

  • 相关阅读:
    1118诗名,诗词形式,类别实体导入
    1119飞花令句子,好友关系导入
    1116五言诗生成&古今地名标注与展示
    1120地点实体与事件实体导入
    1121实体导入总结
    1111诗人生平信息提取
    1114诗词收集&藏头诗生成&Snownlp正负情感分析
    1112全体诗人个人生平提取
    1113七言诗词收集与LSTM自动写诗
    WPF ListView DataGrid日期时间类型格式转换
  • 原文地址:https://www.cnblogs.com/paulwhw/p/11532066.html
Copyright © 2011-2022 走看看