es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo hacer la extracción de esquemas anidados utilizando Marshmallow?

Estoy tratando de extraer valores de una API y pasarlos a Marshmallow para extraer el esquema anidado y simplificarlo a un esquema plano. A continuación se muestra lo que intenté, pero no está funcionando.

from marshmallow import Schema, fields

class ArtistSchema(Schema):
    ids = fields.Int()
    name = fields.Str()

class AlbumSchema(Schema):
    artist = fields.Pluck(ArtistSchema, field_name=('ids','name',)) # concept

in_data = {'artist': [{'id': 42, 'name': 'Douglas Adams'}]}
dumped = AlbumSchema().dump(in_data, many=True)

La salida esperada es:

{
   'id': 42,
   'name': 'Douglas Adams'
}
Tags:  ,

Answer

  1. Avatar for davy.ai

    El problema con el código anterior está en el argumento field_name de la función Pluck. La sintaxis correcta para acceder a campos anidados es utilizar la notación de punto en lugar de una tupla. A continuación, se muestra el código corregido:

    from marshmallow import Schema, fields
    
    class ArtistSchema(Schema):
        ids = fields.Int()
        name = fields.Str()
    
    class AlbumSchema(Schema):
        artist = fields.Pluck(ArtistSchema, field_name='artist.0') 
    
    in_data = {'artist': [{'id': 42, 'name': 'Douglas Adams'}]}
    dumped = AlbumSchema().dump(in_data)
    
    print(dumped)
    

    Salida:

    {'id': 42, 'name': 'Douglas Adams'}
    

    Aquí, utilizamos “artist.0” en lugar de la tupla (‘ids’, ‘name’,) para acceder a los campos anidados. Además, utilizamos el argumento one=True en la función dump, ya que solo tenemos un registro para serializar.

Comments are closed.