Tenho um payload em formato XML e preciso convertê-lo para JSON. O XML contém muitos pares de chave-valor e também muitos atributos, e preciso que esses atributos sejam incluídos no JSON também.
<CustomData>
<CustomIdentifier attribute1="value1" attribute2="value2">
test </CustomIdentifier>
</CustomData>
Este output writeAttributes=true
faz __text
, mas eu não quero tê-lo. Quero mudar isso dinamicamente para que isso __text
se torne uma chave. Tenho mais atributos e não posso ter em todos os lugares__text
exemplo:
{
"CustomData": {
"CustomIdentifier": {
"@attribute1": "value1",
"@attribute2": "value2",
"CustomIdentifier": "test"
}
}
}
O recurso integrado não permite a personalização da saída. Para atingir a saída esperada, você precisa de uma transformação personalizada. Ela pode ser implementada criando uma função recursiva que, quando recebe um objeto com atributos, produz um objeto com o valor atual sob uma nova chave com o mesmo nome da chave existente e concatena os atributos como novos valores-chave. Caso contrário, retorna o valor aplicando recursivamente a mesma transformação. Qualquer outro tipo está retornando como está. Minha implementação inclui mapear cada elemento de uma matriz, embora não haja matrizes em entradas XML. Deve funcionar com outro formato, mas não testei.
Exemplo
Função:
Entrada:
Saída: