【发布时间】:2015-01-07 20:33:57
【问题描述】:
我在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 字符串。
【问题讨论】:
-
不,当然没有。如果没有先验知识模型,您将如何序列化任意数据类型?仅仅因为您作为程序员了解
bytearray代表什么并不意味着 JSON 编码器会知道。 -
特别是,对于 bytearray,是否将其序列化为字符串或列表甚至都不是很明显(JSON 没有那么多类型可供选择)。
-
我检查了数据库中的表,发现这是因为
bit类型的字段,它只取0或1个值。所以,在 Python/Django 中不能处理这样一个标准且“简单”的类型是相当奇怪的 -
这绝对不是 Python 的限制! JSON 是设计的受限类型集(为了互操作性和安全性);不要将其与酸洗之类的一般序列化混淆。
-
@Jacobian:为什么这令人惊讶?仅仅因为存在可能的映射并不意味着它在所有用例中都是正确的映射。映射只有 0 和 1 的字节数组可以映射到布尔值列表、字符串或整数列表,并且所有 3 都可以表示 JSON 中的信息。但是如果这些字节代表字符呢?还是小整数?
标签: python json django serialization