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.

Fastify respuesta: tratar null como indefinido

Cuando se trabaja con Java, la anotación @JsonInclude(Include.NON_NULL) hace que los valores nulos se omitan en la salida JSON final. Por ejemplo, el objeto {a: 5, b: null} se serializa como {a: 5}.

Fastify/Typescript ya se comporta de manera similar con los valores indefinidos. Por ejemplo, el objeto {a: 5, b: undefined} se serializa como {a: 5}.

Pero, ¿hay alguna forma de hacer que Fastify/Typescript funcione de manera similar con los valores nulos? Actualmente, el objeto {a: 5, b: null} se serializa como {a: 5, b: null} en lugar de {a: 5}.

Hasta ahora, mi solución ha sido inspeccionar individualmente los campos y reemplazar los valores nulos por indefinidos, pero esto es engorroso y propenso a errores. ¡Espero encontrar una solución más limpia!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Hasta donde yo sé, Fastify/Typescript no tiene una opción incorporada para excluir los valores nulos del resultado final del JSON. Una opción es utilizar una biblioteca como json-stringify-safe o fast-json-stringify que permite personalizar el proceso de serialización. Con estas bibliotecas, puedes definir tu propia función de serialización que ignora los valores nulos. Aquí tienes un ejemplo usando fast-json-stringify:

    import { createStringify } from 'fast-json-stringify';
    
    interface MyObject {
      a: number;
      b: number | null;
    }
    
    const schema = {
      type: 'object',
      properties: {
        a: { type: 'number' },
        b: { type: ['number', 'null'] },
      },
    };
    
    const stringify = createStringify({
      schema,
      // Define custom serializer for b field
      properties: {
        b: {
          transform: (value: number | null) => {
            if (value === null) {
              return undefined;
            }
            return value;
          },
        },
      },
    });
    
    const obj: MyObject = { a: 5, b: null };
    const json = stringify(obj); // Resultado: {"a":5}
    
    

    Aquí definimos una función de transformación personalizada para el campo b que reemplaza los valores nulos por undefined. La variable json contiene el resultado final del JSON sin valores nulos. Ten en cuenta que necesitamos definir un esquema JSON para el objeto para que fast-json-stringify sepa qué tipos esperar.

Comments are closed.