咱們在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數據,好比說datetime
與Decimal
類型的數據,這時就須要咱們先把這兩種格式的數據轉換爲Python的str
,而後再進行JSON序列化操做。json
咱們在進行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
類型的數據咱們能夠利用Python的decimal模塊
先將其轉爲str
:string
import decimal price = str(decimal.Decimal(price).quantize(decimal.Decimal('0.00')))
而後把獲得的結果再進行序列化便可。class