Как изменить формат вложенной полезной нагрузки?

#python #django

#python #django

Вопрос:

Я хочу изменить свою полезную нагрузку json с:

 {
    "grade": "ten",
    "studentdlList": [
        {
            "studentdetail": {
                "name": "mw",
                "rollno": 19
            }
        },
        {
            "studentdetail": {
                "name": "battery",
                "rollno": 44
            }
        }
    ]
}
  

К форме ниже, потому что первая становится слишком сложной и избыточной:

 {
    "grade": "ten",
    "studentdlList": [
            "studentdetail": {
                "name": "mw",
                "rollno": 19
            }
        ,
            "studentdetail": {
                "name": "battery",
                "rollno": 44
            }

    ]
}
  

Для достижения результата мои сериализаторы приведены ниже:

 class SerializerTemp(serializers.Serializer):
    name =  serializers.CharField()
    rollno =  serializers.IntegerField()

class Studentserializer(serializers.ModelSerializer):
    studentdetail = SerializerTemp(source="*")

    class Meta:
        model = Student
        fields = ('studentdetail',)

class SiteSerializer(serializers.ModelSerializer):
    studentdlList = Studentserializer(many = True)

    class Meta:
        model = Grade
        fields = ("grade", "studentdlList")
  

Последний сериализатор также имеет update и create (которые я здесь не разместил). Как я могу изменить свою полезную нагрузку на указанную форму, чтобы она была менее избыточной и более понятной?

Комментарии:

1. Ваш ожидаемый результат — недопустимый JSON. Это похоже на входные данные, за исключением того, что вы удалили некоторые обязательные фигурные скобки.

2. Это правильно, что я убрал фигурные скобки, это то, чего я пытался достичь!

Ответ №1:

Как сказано в комментариях, приведенный пример не является допустимым JSON. Здесь у вас есть список объектов, и поэтому скобки необходимы, чтобы явно указать, что это объект:

 {
    "grade": "ten",
    "studentdlList": [
        {
            "studentdetail": {
                "name": "mw",
                "rollno": 19
            }
        },
        {
            "studentdetail": {
                "name": "battery",
                "rollno": 44
            }
        }
    ]
}
  

Вы можете изменить свой код на:

 class Studentserializer(serializers.ModelSerializer):  
    class Meta:
        model = Student
        fields = ('name', 'rollno',)

class SiteSerializer(serializers.ModelSerializer):
    studentdlList = Studentserializer(many = True)

    class Meta:
        model = Grade
        fields = ("grade", "studentdlList")
  

Чтобы создать что-то вроде:

 {
    "grade": "ten",
    "studentdlList": [
        {
            "name": "mw",
            "rollno": 19
        },
        {
            "name": "battery",
            "rollno": 44
        }
    ]
}
  

Комментарии:

1. Я уже могу получить рекомендуемый вывод в формате json, хотя спасибо!