bytearray不是JSON可序列化的

时间:2014-11-11 10:15:10

标签: python json django serialization

我在Python/Djangobytearray(b'') is not JSON serializable中收到此错误消息。目前,我这样做:

...
from django.core.serializers.json import DjangoJSONEncoder
...

output = json.dumps(data, cls=DjangoJSONEncoder)
return HttpResponse(output)

我导入DjangoJSONEncoder,因为在此之前我遇到了datetime的问题。这个问题消失了,但现在我的另一个问题是类型bytearray。所以,我有兴趣知道,如果有一种标准的通用方法来创建json字符串,无论你使用什么数据类型。

2 个答案:

答案 0 :(得分:2)

正如@Martijn Pieters在评论中建议的那样,Json编码器不知道如何将bytearray转换为相应的json表示法。

查看https://docs.python.org/2/library/json.html#encoders-and-decoders了解json理解的数据类型。 DjangoJSONEncoder使用相同的子集,了解django查询集。

您的问题的解决方案可能是为bytearray实现custom encoder,并在UI中正确处理响应。

答案 1 :(得分:1)

对于json无法编码的类型,可以先使用cPickle.dumps()转换为字符串类型,然后使用json。

在使用cPickle之前,请记住来自docs的警告:

  

警告:pickle模块无法防止错误或恶意构造的数据。切勿取消从不受信任或未经身份验证的来源收到的数据。