假设我有一个简单的django模型:
class Snippet(models.Model):
created = models.DateTimeField(auto_now_add=True)
title = models.CharField(max_length=100, blank=True, default='')
当我通过django web框架将信息显示为JSON时,我得到了这个:
[{"id": 1, "title": "hello"}, {"id": 2, "title": "world"}]
如何为生成的JSON添加数组标题?像这样:
["books" :{"id": 1, "title": "hello"}, {"id": 2, "title": "world"}]
答案 0 :(得分:3)
所以你的客户端API要求JSON是一个对象而不是一个数组(当使用浏览器内置的javascript解析器解析JSON时,有一个安全原理,但我忘了原因)......
如果您的客户端API不介意PaginationSerializer
添加的额外字段,您可以执行以下操作:
class BookSerializer(pagination.BasePaginationSerializer):
results_field = "books"
class BookListView(generics.ListAPIView):
model = Book
pagination_serializer_class = BookSerializer
paginate_by = 9999
这将导致:
{
'count': 2,
'next': null,
'previous': null,
'books': [
{"id": 1, "title": "hello"},
{"id": 2, "title": "world"}
]
}
[更新]
避免将数组作为JSON根目录的安全原因是JSON Hijacking。基本上,一个聪明的黑客可以覆盖数组构造函数,以便做出讨厌的事情。仅在您的API正在回答GET请求并使用cookie进行身份验证时才相关。