python - datetime.date(2014, 4, 25) 在 Django 中不是 J

编辑

此问题与 How to overcome "datetime.datetime not JSON serializable"? 不重复 因为,虽然这是同一个问题,但它提供了一个特定的上下文:Django。因此,有些解决方案适用于此处,但不适用于所提供链接的问题。


原始问题

我关注了How to overcome "datetime.datetime not JSON serializable"?但这无济于事

我试过这段代码

>>> import datetime
>>> a =datetime.date(2014, 4, 25)
>>> from bson import json_util
>>> b = json.dumps(a,default = json_util.default)
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/usr/lib/python2.7/json/__init__.py", line 250, in dumps
    sort_keys=sort_keys, **kw).encode(obj)
  File "/usr/lib/python2.7/json/encoder.py", line 207, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "/usr/lib/python2.7/json/encoder.py", line 270, in iterencode
    return _iterencode(o, 0)
  File "/home/.../python2.7/site-packages/bson/json_util.py", line 256, in default
    raise TypeError("%r is not JSON serializable" % obj)
TypeError: datetime.date(2014, 4, 25) is not JSON serializable

有人可以帮助我使用 datetime.date 序列化器和反序列化器吗?

最佳答案

你也可以这样做:

def date_handler(obj):
    return obj.isoformat() if hasattr(obj, 'isoformat') else obj

print json.dumps(data, default=date_handler)

来自 here .

更新根据 J.F.Sebastian 评论

def date_handler(obj):
    if hasattr(obj, 'isoformat'):
        return obj.isoformat()
    else:
        raise TypeError

print json.dumps(data, default=date_handler)

关于python - datetime.date(2014, 4, 25) 在 Django 中不是 JSON 可序列化的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23285558/

相关文章:

python - 如果键可能不存在,则从 Python dict 读取

php - json_encode 不使用 html 字符串作为值

json - HTTPResponse 对象 -- JSON 对象必须是 str,而不是 'byte

python - 如何从一个文件中提取多个 JSON 对象?

python - 避免 KeyError 的默认字典键

javascript - 如何在 console.log 中打印 JSON 数据?

json - Spring Boot Actuator 端点的 pretty-print JSON

json - 如何自定义来自 spring @Valid 验证的默认错误消息?

json - 从 PostgreSQL 中的函数返回中删除双引号

iphone - 从 NSArray 创建一个 json 字符串