Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 对于Django模型Rest框架,返回键/属性JSON对象,而不是JSON数组_Python_Django_Backend - Fatal编程技术网

Python 对于Django模型Rest框架,返回键/属性JSON对象,而不是JSON数组

Python 对于Django模型Rest框架,返回键/属性JSON对象,而不是JSON数组,python,django,backend,Python,Django,Backend,如标题中所述。我从后端返回了这样的JSON数组: [ {id:1, name:'name1'}, {id:2, name:'name2'}, {id:3, name:'name3'}, {id:4, name:'name4'} ] 我想返回这样的内容: { "1": {id:1, name:'name1'}, "2": {id:2, name:'name2'}, "3": {id:3, n

如标题中所述。我从后端返回了这样的JSON数组:

[
    {id:1, name:'name1'},
    {id:2, name:'name2'},
    {id:3, name:'name3'},
    {id:4, name:'name4'}
] 
我想返回这样的内容:

{
  "1": {id:1, name:'name1'},
  "2": {id:2, name:'name2'},
  "3": {id:3, name:'name3'},
  "4": {id:4, name:'name4')
}

在Django Rest框架中是否可以发送这样的对象作为响应?显然不会有太多的密钥,因此大小不应该是一个问题。

您可以在将数据发送到客户端之前修改数据

data = [
    {id:1, name:'name1'},
    {id:2, name:'name2'},
    {id:3, name:'name3'},
    {id:4, name:'name4'}
]

data = {key["id"]:value for value in data}
return JsonResponse(data)
如果您正在使用序列化程序,则可选择此选项

如果您使用的是序列化程序,请在序列化数据时使用
来修改数据。它对性能的影响不会超过默认表示形式

class MySerializer(serializers.ModelSerializer):
    class Meta:
        model = MyModal
        fields = ('foo', 'bar', .....,)

    def to_representation(self, instance):
        row = super(MySerializer, self).to_representation(instance)
        return {row["id"]:row}
        

若和默认序列化程序数据相比,元素的数量变得非常大,那个么这将如何影响我的性能呢?很高兴知道您是否正在使用序列化程序,我已经编辑了我的答案。它不会影响性能。这将在第一个索引处返回一个包含所需对象的数组,而不是基本上自己返回对象@苏里亚维尔·辛格