Temos um array multinível, então estamos usando a transformação de funções de mapa múltiplo. Neste caso, como atribuir um ID de campo com valor incremental.
Entrada:
[
{
"productNo": "00011111",
"items": [
{
"color": "000000000006000060",
},
{
"color": "000000000006000061",
}
]
},
{
"productNo": "00022222",
"items": [
{
"color": "000000000006000060"
},
{
"color": "000000000006000061"
}
]
}
]
Código Dataweave que tentei para isso:
%dw 2.0
output application/json
---
flatten(payload map (item, index) -> item.items map (subItem, subIndex) -> {
"ID": subIndex,
"PNR": item.productNo,
"Color": subItem.color
})
Resultado esperado:
[
{
"ID": 1,
"PNR": 00011111,
"Color": "000000000006000060"
},
{
"ID": 2,
"PNR": 00011111,
"Color": "000000000006000061"
},
{
"ID": 3,
"PNR": 00022222,
"Color": "000000000006000060"
},
{
"ID": 4,
"PNR": 00022222,
"Color": "000000000006000061"
}
]
O subIndex acima está sendo redefinido para 0 para a próxima iteração de acordo com o dataweave, então, deixe-me saber o que podemos usar para valor incremental.
Sua entrada não é um json adequado. Está tendo um erro de formatação.
Experimente abaixo.
Neste código, o índice * sizeOf(item.items) calcula o índice base para cada item externo e subIndex + 1 incrementa o índice para cada item interno. Dessa forma, você obtém um valor único e incremental para o campo “ID”.
Com esta modificação, você deve obter a saída esperada conforme mencionado no seu exemplo.
Você pode converter a estrutura em uma estrutura plana antes de transformá-la e depois inserir os índices. Exemplo:
Saída: