Formatação de código / Guias

Conversão entre JSON e XML: o que permanece após ida e volta?

JSON e XML podem carregar registros relacionados, mas organizam valores de forma diferente. Um conversor precisa de regras de mapeamento, e essas regras afetam o resultado.

Duas estruturas, não duas ortografias

JSON tem objetos, arrays, strings, números, booleanos e null. XML tem elementos nomeados, atributos, nós de texto e uma árvore de documentos ordenada. Não existe uma regra universal sem perdas que mapeie cada valor JSON para cada documento XML. Um conversor deve escolher como representar um nome de raiz, atributos e filhos repetidos. MultiVerto usa um objeto JSON de propriedade única como a raiz do documento XML. O nome da propriedade torna-se um nome de elemento. Um objeto especial @attributes contém atributos, enquanto filhos repetidos são escritos a partir de arrays. Estas são convenções desta ferramenta, não nomes definidos pelo padrão XML. Conheça o esquema pretendido antes de aplicar o mapeamento aos dados de produção.

Acompanhar um registro de pedido

Use o exemplo incorporado: um objeto de pedido tem @attributes com id igual à string 7, um array de itens contendo caneta e livro, e count igual ao número 2. A ferramenta JSON-to-XML cria um elemento raiz order, um atributo id, dois elementos item e um elemento count. A ferramenta XML-to-JSON pode ler esse documento simples de volta. Ele agrupa elementos de item repetidos em um array e armazena o atributo sob @attributes. No entanto, o texto do elemento é lido como texto: a contagem que começou como JSON número 2 retorna como string 2. O dígito visível corresponde, mas o tipo não. Compare estruturas de dados analisadas, não apenas como a página parece. Exemplo no conversor incorporado: entrada {"order":{"@attributes":{"id":"7"},"item":["caneta","livro"],"count":2}}; resultado <order id="7"> <item>caneta</item> <item>livro</item> <count>2</count> </order>.

Um registro simples converte, enquanto um tipo numérico muda no retorno.
  1. JSON: count é o número 2; item é um array
  2. XML: count é texto do elemento; dois elementos de item
  3. Voltar para JSON: count é string 2; inspecionar o esquema

Onde a informação muda

Atributos e elementos filhos são distintos no XML, enquanto um objeto JSON usa propriedades, a menos que uma convenção de mapeamento coloque algumas de lado. Nomes repetidos podem se tornar arrays, mas uma única ocorrência pode se tornar um escalar; isso pode surpreender o código esperando um array estável. JSON null, precisão numérica e booleanos precisam de decisões explícitas de esquema porque XML texto sozinho não pode dizê-los separados. A ordenação também pode ser importante para um consumidor XML, mesmo que um aplicativo trate os membros de objeto JSON como não ordenados. MultiVerto deliberadamente rejeita XML documentos misturando texto significativo com elementos filhos, e não suporta todos XML construção. É adequado para registros simples, não documentos arbitrários com conteúdo misto complexo.

Crie o mapeamento antes de converter

Ao integrar dois serviços, obtenha um documento de exemplo e o esquema de recepção. Decida se um campo pertence a um atributo ou elemento filho e como arrays devem ser representados. Especifique como o receptor interpreta número, booleano, string vazio e campo ausente. Se a origem for XML, inspecione namespaces e conteúdo misto antes de usar um mapeador leve; um analisador XML especializado pode ser necessário. Se a origem for JSON, verifique se a raiz é um objeto nomeado e as chaves são nomes de elementos XML válidos para essa ferramenta. Execute um pequeno caso representativo em ambas as direções e, em seguida, teste o resultado no sistema de recepção real, ao invés de assumir que a semelhança visual implica compatibilidade.

Verifique uma viagem de ida e volta com propósito

Copie a saída de exemplo para o conversor XML-to-JSON vinculado e compare os dados reconstruídos com o JSON original. Concentre-se no tipo, elementos repetidos, colocação de atributos e valores vazios. Altere o item array para um elemento e verifique se o software downstream ainda espera um array. Tente uma contagem com um zero à frente somente se o esquema permitir; a semântica de texto e números é diferente. Mantenha o original ao lado do artefato convertido para auditoria. Formatar o XML pode tornar o aninhamento mais fácil de inspecionar, mas a formatação não corrige um erro de mapeamento. Uma análise bem sucedida prova que a sintaxe é aceitável para um analisador; não prova que o documento expressa o significado de negócio esperado por outro aplicativo.

Testar o conversor

Converta o registro de pedido para XML e, em seguida, teste o mapeamento reverso.

Mapear um objeto JSON com uma raiz para elementos XML.

Abrir o conversor completo

Mais guias

Guias de conversão

Explorar guias