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 – Objeto autocontenido – Reemplazar de forma recursiva el nombre del campo.

Soy bastante nuevo en Jolt. Tengo una carga JSON que representa una condición lógica, como AND / OR, que puede contener una matriz de condiciones llamada “conditionPredicates”. Esto puede resultar en condiciones anidadas de la forma AND(OR(a, b, c), OR(d, e)). Quiero reemplazar el campo “conditionPredicates” por simplemente “conditions”. ¿Alguna ayuda por favor?

Entrada de muestra:

json
{
  "type": "Condition.Aggregate.AND",
  "payload": {
    "conditionPredicates": [
      {
        "type": "Condition.Apple",
        "payload": {
          "fruit": "apple"
        }
      },
      {
        "type": "Condition.Aggregate.AND",
        "payload": {
          "conditionPredicates": [
            {
              "type": "Condition.Orange",
              "payload": {
                "fruit": "orange"
              }
            }
          ]
        }
      }
    ]
  }
}

Salida esperada:

json
{
  "type": "Condition.Aggregate.AND",
  "payload": {
    "conditions": [
      {
        "type": "Condition.Apple",
        "payload": {
          "fruit": "apple"
        }
      },
      {
        "type": "Condition.Aggregate.AND",
        "payload": {
          "conditions": [
            {
              "type": "Condition.Orange",
              "payload": {
                "fruit": "orange"
              }
            }
          ]
        }
      }
    ]
  }
}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para lograr esta transformación utilizando Jolt, puedes utilizar la siguiente especificación:

    [
      {
        "operation": "shift",
        "spec": {
          "payload": {
            "conditionPredicates": {
              "*": {
                // Mover todos los campos del elemento actual hacia arriba un nivel
                "@": "&2.[&1]",
                // Renombrar el campo conditionPredicates a conditions
                "$merge": {
                  "conditions": ["&"]
                }
              }
            },
            // Conservar todos los otros campos en el objeto payload
            "*": "&"
          }
        }
      }
    ]
    

    Explicación:

    • La primera operación shift selecciona el campo payload y le aplica una sub-especificación.
    • La sub-especificación selecciona el campo conditionPredicates y le aplica otra sub-especificación a cada uno de sus elementos.
    • Para cada elemento, el símbolo @ se utiliza para mover todos sus campos hacia arriba un nivel, creando así un array de condiciones en el proceso. La notación &2 significa “subir dos niveles en el árbol”. &1 se refiere al índice del elemento actual, que se utilizará para crear el array.
    • Luego, se utiliza la función $merge para agregar un nuevo campo llamado conditions a cada elemento, cuyo valor es el array de condiciones que acabamos de crear.
    • Por último, la sub-especificación conserva todos los otros campos en el objeto payload.

    Esto debería producir el resultado esperado.

Comments are closed.