Python的datetime與Decimal數據進行json序列化的簡單說明

咱們在Python的json.JSONEncoder類中能夠查看Python數據序列化爲JSON格式的數據時數據類型的對應關係:python

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序列化操做。json

datetime類型數據的處理

咱們在進行json.dumps()操做的時候能夠指定進行序列化的類:code

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方法:ci

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

Decimal類型數據的處理

對於Decimal類型的數據咱們能夠利用Python的decimal模塊先將其轉爲strstring

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

而後把獲得的結果再進行序列化便可。class

相關文章
相關標籤/搜索