python中的json.dumps在用户定义的对象列表上

时间:2012-09-11 02:30:03

标签: python django json

我有一个叫做照片的课程。这个类有4个字段,其中一个叫做文件。这个文件是Django的图像字段类型。

我有一个由这些图像字段组成的列表。我想将此python列表转换为json字符串。如果我在列表中调用json.dumps(listData),则会收到此错误:

ImageFieldFile: photos/KObtu.jpg.

这似乎是明智的。系统将图像字段表示为无效的字符串json。如何覆盖此输出字符串?或者,有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

您可以创建一个知道如何编码ImageFieldFile的自定义JSON编码器类:

import json
from django.db.models.fields.files import ImageFieldFile

class EnhancedJSONEncoder(json.JSONEncoder):
    """
    JSONEncoder subclass that knows how to encode Django "ImageFieldFile"s.
    """

    def default(self, o):
        if isinstance(o, ImageFieldFile):
            # Treat ImageFieldFile as a unicode string
            return super(EnhancedJSONEncoder, self).default(unicode(o))
        else:

            return super(EnhancedJSONEncoder, self).default(o)

然后您将json.dumps()调用为:

json.dumps(listData, cls=EnhancedJSONEncoder))

这假设您希望ImageFieldFile表示为字符串