我有一个奇怪的问题。
我有一个使用 Django REST 框架构建的 API。
我正在打电话并得到以下 JSON:
{
"success": true,
"result": {
"user_type": "ta",
"email": "myemail@gmail.com",
"first_name": "John",
"last_name": "Smith",
"mobile_phone": "555-555-5555",
"id": "0f165a85-2da6-4dcb-97cb-bf04900a942b"
}
}
当我试图从
response.data
获得相同的输出时,我尝试添加一个日志中间件并将 int 写入我数据库中的文本字段。对于相同的请求
response.data
是这样的:(这被写入我的数据库,而不是上面所需的 JSON 字符串):{'success': True, 'result': OrderedDict([('user_type', 'ta'), ('email', 'myemail@gmail.com'), ('first_name', 'John'), ('last_name', 'Smith'), ('mobile_phone', '555-555-5555'), ('id', UUID('0f165a85-2da6-4dcb-97cb-bf04900a942b'))])}
这是为什么?我怎样才能摆脱它
OrderedDict
并从 response.data
获取完美的 JSON 字符串?请注意:
json.dumps
不起作用。我收到 TypeError: Object of type 'UUID' is not JSON serializable
.我在模型中的整个 ID 系统都是基于 UUID。但是,在上面的示例中,我的 Django REST 框架能够很好地序列化它......这是怎么做到的?
最佳答案
您遇到此问题是因为您尝试使用 json.dumps
转储内部表示。 ,它不知道如何处理 UUID 对象。
我可以看到两个选项 - 一,教 dumps
如何序列化 UUID。这可以通过继承 JSONDecoder
来完成。 ,例如这个SO answer .
但是,DRF 已经知道如何序列化这些字段。在调试器中四处寻找,看起来响应文本隐藏在 response.rendered_content
中.我会检查在您的中间件运行时是否已填充。
关于Django:输出 JSON,而不是 OrderedDict,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44556516/