Django:输出 JSON,而不是 OrderedDict

标签 django django-rest-framework

我有一个奇怪的问题。

我有一个使用 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/

相关文章:

python - Django使用 'through'关系表从模型中获取所有相关对象

jsonp - 将 jsonp 与 django-rest-framework 一起使用

python - views.py 中的 .post() 、 .create() 和 perform_create() 与 serializers.py 中的 .create() 有什么区别

python - 从 django Rest Framework url 获取参数值的问题

django init 函数在 Form 中带有 attrs

python - 为什么列的默认值不适用于 django

python - 导入 django_filters.rest_framework 错误

django - 通过放置更新获取异常 : Incorrect type. 预期 pk 值,收到字典

python - Django 1.10 将问号转换为静态文件 url 中的百分号

python - 异常值: cannot import name TimeoutStateError when import Geocoder