我在Python/Django
:bytearray(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字符串,无论你使用什么数据类型。
答案 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模块无法防止错误或恶意构造的数据。切勿取消从不受信任或未经身份验证的来源收到的数据。