Iteración de Matriz JSON – Travesía de Árbol en Mulesoft
JSON de entrada:
{
"id": "/",
"code": "/",
"typeCode": "CPC",
"timeStamp": "2021-11-16T17:00:00-06:00",
"childList": [
{
"id": "577-1-1",
"code": "1111",
"name": "Electronics-1-1",
"displayName": "Electronics-1-1",
"active": true,
"languageCode": "en",
"typeCode": "CPC",
"childList": [
{
"id": "579-2-1",
"code": "2222",
"name": "Calculators-2-1",
"displayName": "Calculators-2-1",
"active": true,
"languageCode": "en",
"typeCode": "CPC",
"childList": []
},
{
"id": "509-2-2",
"code": "3333",
"name": "Oven-2-2",
"displayName": "Oven-2-2",
"active": true,
"languageCode": "en",
"typeCode": "CPC",
"childList": [
{
"id": "749-3-1",
"code": "4444",
"name": "MicroOven-3-1",
"displayName": "MicroOven-3-1",
"active": true,
"languageCode": "en",
"typeCode": "CPC",
"childList": []
}
]
}
]
},
{
"id": "549-1-2",
"code": "5555",
"name": "Refrigerator-1-2",
"displayName": "Refrigerator-1-2",
"active": true,
"languageCode": "en",
"typeCode": "CPC",
"childList": []
}
]
}
- Y el XML esperado es el siguiente: – Aquí se debe tener en cuenta el categoryPath para la dirección completa del childElement y agruparlo en el childList del primer padre
- No sabremos los elementos secundarios exactos de ninguna matriz, es decir, puede haber ‘n’ número de childList dentro de un childList
- Si el elemento childList es una matriz vacía, debemos hacer la asignación al xml y detenerla, de lo contrario, proceder dentro de esa matriz y hacer la asignación para esos elementos secundarios
Transformación XML:
<Category CategoryId="${childList.id}" CategoryPath="${childList.code}/${childList.childList.code}" Description="${childList.name}" ShortDescription="${childList.displayName}">
<Extn ExtnSyncTS="${headers.timeStamp}"/>
</Category>
XML esperado:
<CategoryListArray>
<CategoryList>
<Category CategoryId="577-1-1" CategoryPath="1111" Description="Electronics-1-1" ShortDescription="Electronics-1-1">
<Extn ExtnSyncTS="2021-11-16T17:00:00-06:00"/>
</Category>
<Category CategoryId="579-2-1" CategoryPath="1111/2222" Description="Calculators-2-1" ShortDescription="Calculators-2-1">
<Extn ExtnSyncTS=" "/>
</Category>
<Category CategoryId="509-2-2" CategoryPath="1111/3333" Description="Oven-2-2" ShortDescription="Oven-2-2">
<Extn ExtnSyncTS="2021-11-16T17:00:00-06:00"/>
</Category>
<Category CategoryId="749-3-1" CategoryPath="1111/3333/4444" Description="MicroOven-3-1" ShortDescription="MicroOven-3-1">
<Extn ExtnSyncTS="2021-11-16T17:00:00-06:00"/>
</Category>
</CategoryList>
<CategoryList>
<Category CategoryId="549-1-2" CategoryPath="5555" Description="Refrigerator-3-1" ShortDescription="Refrigerator-3-1">
<Extn ExtnSyncTS="2021-11-16T17:00:00-06:00"/>
</Category>
</CategoryList>
</CategoryListArray>
davy.ai
Transformación de JSON a XML usando Mule4
Enunciado del problema
Queremos transformar los datos JSON dados a XML con las siguientes condiciones:
Necesitamos transformar los datos JSON al formato XML como se muestra a continuación:
Solución
Para resolver el problema dado, primero debemos analizar la cadena JSON entrante en un objeto JSON. Una vez obtenido el objeto, verificaremos si
childList
es una matriz vacía. Si la matriz no está vacía, iteramos a través de cada uno de los elementos dechildList
y llamamos recursivamente a la función de transformación para cada elemento. Si la matriz está vacía, mapeamos ese nodo en particular al XML según la estructura dada.La función de transformación utilizada aquí está escrita en
Dataweave
, que es un lenguaje de transformación utilizado en Mule4. La función de transformación se ve así:Aquí, la función
transformData()
toma un objeto y lo mapea al formato XML según la estructura proporcionada. En la función, primero verificamos sichildList
está vacío. Si es así, lo mapeamos según la estructura XML dada. Si no, iteramos a través de cada elemento dechildList
y llamamos recursivamente a la funcióntransformData()
.Finalmente, la función devuelve el resultado transformado en el formato XML requerido como se indica.
Conclusión
Por lo tanto, podemos transformar los datos JSON dados al formato XML requerido utilizando la función de
Dataweave
mencionada anteriormente. Esta función de transformación se puede utilizar en el flujo de Mule4 para implementar la transformación requerida.