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 agregar y eliminar correctamente elementos de la carga útil? (o reemplazar según una condición)

Entonces tengo una carga útil que tiene atributos antiguos, y quiero migrarlos para que sean los nuevos que usa toda la lógica restante. Antes de hacer la validación, quiero modificarlo un poco.
Actualmente puedo agregar y eliminar en transformaciones separadas, pero ¿sería posible hacerlo de una sola vez?

Carga útil de ejemplo:

{
  "country": "Country",
  "town": "Town",
  "district": "Dist",
  "owner": "Owner"
}

y la salida debería ser:

{
  "country": "Country",
  "city": "Town",
  "area": "Dist",
  "owner": "Owner"
}

Entonces agrego la transformación:

%dw 1.0
%output application/json
---
payload ++ {city: payload.town}
when 
  payload.town != null
otherwise
  payload ++ {area: payload.distrinct}
when
  payload.distrinct != null
otherwise
  payload

Quiero verificar si la carga útil no tiene valores nulos en la clave “town” y agregar una nueva clave “city” con el valor de la clave “town”, y hacer lo mismo para verificar si “distrinct” no es nulo y agregar su valor como la clave “area”. Sin embargo, esto solo sucede para “city” (sé que se agregará al final, pero el orden no es un problema en mi caso), sin embargo, las claves pueden no estar presentes (puede que no haya “town”, o no haya “district” o no haya ambos).

Y en la siguiente transformación:

%dw 1.0
%output application/json
---
payload -- {town: payload.town}
when 
  payload.town != null
otherwise
  payload

Intento verificar si las claves existen y luego eliminar las antiguas, pero no tengo suerte con eso 🙁
¿Alguna ayuda?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible agregar y quitar claves de una vez utilizando DataWeave. Puede actualizar la transformación existente de la siguiente manera:

    %dw 1.0
    %output application/json
    ---
    payload ++ {
        city: payload.town default null,
        area: payload.district default null
    } - ['town', 'district']
    

    En esta transformación, primero se agregan las nuevas claves city y area al payload, con sus valores establecidos como payload.town o payload.district, respectivamente. La cláusula default null se utiliza para manejar casos en los que la clave original no existe en el payload. Después de esto, se eliminan las claves antiguas del payload utilizando el operador -, pasando una lista de nombres de claves para eliminar.

    Con esta única transformación, puede tanto agregar como eliminar claves del payload.

Comments are closed.