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.

Jolt transforma varios objetos en un arreglo con un nuevo nombre de campo.

Soy nuevo usando la herramienta Jolt y me pregunto si hay alguna forma de tomar varios objetos JSON y ponerlos en un array con un nuevo campo con el siguiente nombre:

Entrada:

{
  "userId": 1,
  "age": 20,
  "desc1": "valor desc1",
  "desc2": "valor desc2",
  "desc3": "valor desc3"
}

Especificación JSON:

[
  {
    "operation": "shift",
    "spec": {
      "userId": "ID",
      "age": "edad",
      "*": "informacionAdicional"
    }
  }
]

Resultado esperado:

{
  "ID": 1,
  "edad": 20,
  "informacionAdicional": [
    {
      "code": "desc1",
      "value": "valor desc1"
    },
    {
      "code": "desc2",
      "value": "valor desc2"
    },
    {
      "code": "desc3",
      "value": "valor desc3"
    }
  ]
}

Usando la especificación anterior, solo puedo obtener este resultado:

{
  "ID": 1,
  "test": 20,
  "informacionAdicional": [
    "valor desc1",
    "valor desc2",
    "valor desc3"
  ]
}

¿Alguna sugerencia sobre lo que me he perdido?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, para obtener el resultado esperado, puedes modificar la especificación JSON de la siguiente manera:

    [
      {
        "operation": "shift",
        "spec": {
          "userId": "ID",
          "age": "edad",
          "*": {
            "@(1,desc1)": {
              "$": "additionalInformation[0].valor",
              "#": "additionalInformation[0].codigo"
            },
            "@(1,desc2)": {
              "$": "additionalInformation[1].valor",
              "#": "additionalInformation[1].codigo"
            },
            "@(1,desc3)": {
              "$": "additionalInformation[2].valor",
              "#": "additionalInformation[2].codigo"
            }
          }
        }
      }
    ]
    

    Los cambios realizados en la especificación son los siguientes:

    • se agregaron tres sub-especificaciones debajo de la llave * para manejar cada campo desc como un objeto separado en el arreglo additionalInformation.
    • se utilizó el modificador @ para hacer coincidir las llaves basadas en sus valores en lugar de sus nombres.
    • se utilizó el modificador # para asignar los nombres de las llaves coincidentes al campo codigo en cada objeto.

    Con estos cambios, la entrada dada producirá la salida esperada.

Comments are closed.