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

然后把得到的結果再進行序列化即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM