json序列化中文及日期时间

1. 中文显示Unicode

python的json.dumps方法默认会输出unicode类型。

解决方法
要输出中文需要指定ensure_ascii参数为False

2. 序列化日期时间出错

使用python自带的json.dumps方法转换数据为json的时候,如果格式化的数据中有datetime类型的数据时会报错

TypeError: datetime.datetime(2014, 03, 20, 12, 10, 44) is not JSON serializable

官方文档中关于json.dumps方法的一个参数(cls)说明:

To use a custom JSONEncoder subclass (e.g. one that overrides the default() method to serialize additional types), specify it with the cls kwarg; otherwise JSONEncoder is used.

扩展了一个JSONEncoder出来用来格式化时间

from datetime import datetime, date
import json

class CJsonEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, datetime):
            return obj.strftime('%Y-%m-%d %H:%M:%S')
        elif isinstance(obj, date):
            return obj.strftime('%Y-%m-%d')
        else:
            return json.JSONEncoder.default(self, obj)
# 使用
json.dumps(cursor.fetchall(), indent=2, cls=CJsonEncoder, ensure_ascii=False)

你可能感兴趣的:(json序列化中文及日期时间)