Não há mapeamento padrão entre os dois. XML 1.0 possui atributos, namespaces, conteúdo misto ordenado e comentários; RFC 8259 tem seis tipos e nenhum atributo Cada conversor inventa sua própria ponte, por isso dois deles discordam.
A integração que me ensinou a respeitar a conversão XML para JSON foi uma API de transportadora. O descanso moderno em todos os outros lugares da pilha e, em seguida, um terminal legado que falava SOAP e retornava envelopes de XML que eu precisava dobrar em um pipeline JSON. "É apenas XML para JSON", pensei e procurei um conversor de uma linha. Em seguida, chegaram os edge cases: um <Package> Elemento que às vezes era um único objeto e às vezes uma lista, dependendo de quantos pacotes estavam na ordem. um id Atributo que meu conversor naive caiu completamente porque ele apenas olhava para o texto do elemento. um <Description> envolto em CDATA porque continha um e comercial. Cada um deles corrompeu silenciosamente os dados - o JSON saiu parecendo plausível e estava errado de maneiras que só apareciam três serviços downstream.
XML e JSON parecem que devem converter trivialmente um no outro, e eles don' t, porque eles modelam dados com primitivas diferentes JSON tem objetos, arrays, strings, números, booleanos e nulo - um conjunto pequeno e limpo XML tem elementos, atributos, nós de texto, conteúdo misto, namespaces, CDATA, comentários e instruções de processamento, e crucialmente tem sem matrizes e nenhum tipo. Portanto, um conversor precisa tomar decisões que um formato sem perdas não: para onde vão os atributos quando JSON não tem conceito deles? Como você informa um único elemento de uma lista de um item quando XML marca a mesma coisa? O que acontece com um elemento que possui atributos e texto?
um Conversor de XML para JSON Isso toma essas decisões deliberadamente - e consistentemente - é a diferença entre uma integração limpa e uma semana de depuração downstream Aquela que EU construí para Toolz.dev mapeia atributos para chaves prefixadas para que nada seja perdido, colapsa tags repetidas em matrizes JSON para que a estrutura seja preservada, mantém o texto de conteúdo misto sob uma chave dedicada e lê CDATA literalmente E faz tudo isso com um analisador livre de dependência que é executado em seu navegador, o que importa porque as cargas úteis de integração são exatamente o tipo de dados que você deve' t carregar para um servidor estranho' s.
Este guia aborda como a conversão lida com as peculiaridades estruturais do XML, quando elementos repetidos se tornam arrays, como lidar com atributos e namespaces e os fluxos de trabalho SOAP e RSS onde essa conversão acontece constantemente.
tl;dr: Cole XML no Conversor Toolz.dev XML para JSON, escolha indentação e obtenha um JSON limpo onde os atributos se tornam
@-Teclas prefixadas, tags repetidas tornam-se arrays, o texto de conteúdo misto fica sob#text, e CDATA é lido literalmente. Viradas de análise de tipo opcional"44.95"em um número real. Ele usa um analisador sem dependências, executa 100% do lado do cliente para que as cargas úteis de SOAP e integração nunca carreguem e pares com json para yaml e o formatador json Para a próxima etapa em seu pipeline.
Por que o XML para JSON não é um mapeamento simples e individual?
A intuição de que XML e JSON são intercambiáveis vem de seu trabalho compartilhado - representando dados estruturados - e quebra em seus diferentes blocos de construção A incompatibilidade aparece em quatro lugares específicos, e um conversor & #39; A qualidade é inteiramente sobre como ele lida com eles.
Os atributos não têm equivalentes JSON. <book id="bk101">War and Peace</book> Possui um atributo (id) e conteúdo de texto (War and Peace). JSON não tem noção de um atributo; tudo é um par chave-valor Um conversor deve inventar uma convenção, e o difundido é prefixar chaves de atributos - { "book": { "@id": "bk101", "#text": "War and Peace" } }. Solte os atributos, como fazem os conversores ingênuos, e você perdeu dados silenciosamente.
JSON possui arrays; XML não. Em XML, uma lista é a mesma etiqueta repetida: três <item> Elementos sob um único pai. Mas um único <item> parece estruturalmente idêntico a uma lista de um. JSON precisa saber se deve emitir um objeto ou uma matriz, e o único sinal disponível é a ocorrência - portanto, tags repetidas tornam-se matrizes e tags únicas permanecem objetos.
Conteúdo misto. Um elemento pode conter elementos filhos e texto solto. Os objetos JSON não podem representar naturalmente "Este objeto também possui um valor de string nua", portanto, o texto fica sob uma tecla reservada como #text.
Os tipos não existem em XML. Todo valor em XML é texto. <price>44.95</price> é a corda "44.95", não um número, a menos que um conversor opte por coagi-lo - e essa escolha pode estar errada, porque <zip>08544</zip> Deve ficar uma corda ou perder seu zero à esquerda.
o conversor Lida com cada um deles explicitamente, em vez de fingir que não existe. É por isso que a saída permanece fiel à fonte, em vez de soltar silenciosamente as partes de XML para as quais o JSON não tem slot.
Quando os elementos repetidos se tornam arrays?
Esta é a parte mais confusa da conversão XML para JSON e vale a pena entender em vez de se surpreender. A regra conversor Usos é baseado em ocorrências: em um determinado pai, se um nome de tag aparecer mais de uma vez, seus valores são colapsados em uma matriz JSON; se ele aparecer exatamente uma vez, ele permanecerá um único objeto ou valor.
Então um <catalog> com dois <book> Crianças produz { "catalog": { "book": [ {...}, {...} ] } } - uma matriz. Mas a <catalog> com um <book> produz { "catalog": { "book": {...} } } - um objeto simples, sem matriz.
A consequência de planejar: Uma lista de um item não se parece com uma lista. Se o seu código downstream espera catalog.book Para ser sempre uma matriz e itera sobre ela, uma resposta de um único livro a quebrará, porque book será um objeto naquele tempo particular Este é & #39; t um bug na conversão - it& #39; s uma consequência inevitável de XML não marcar listas - mas it& #39; s um gotcha real em integrações onde a contagem de itens varia Meu desastre de transportadora de transporte foi exatamente isso: ordens de um pacote retornaram um objeto onde ordens de vários pacotes retornaram uma matriz, e meu código assumiu matriz.
O padrão defensivo em seu código de consumo é normalizar: se um campo pode ser, coagi-lo a uma matriz antes de iterar ([].concat(catalog.book)). esperto por que A forma varia é o que permite que você escreva esse guarda em vez de se queimar por ela.
Como os atributos e namespaces são tratados?
Atributos convertem em chaves de objeto com um @ prefixo. <user role="admin" active="true"> torna-se { "user": { "@role": "admin", "@active": "true" } }. O prefixo mantém atributos visualmente distintos dos elementos filhos e evita uma colisão onde um atributo e um elemento filho compartilham um nome. Se você não fizer isso, & #39; precisa de atributos - você só deseja os dados do elemento - o conversor Possui uma opção de "ignorar atributos" que os descarta inteiramente para obter um resultado mais limpo.
Os namespaces aparecem como parte do nome da tag. <soap:Body> torna-se uma chave literalmente chamada "soap:Body", e xmlns:soap="..." é um atributo como qualquer outro, pousando sob @xmlns:soap. Esta é a escolha pragmática: resolver totalmente os namespaces para seus URIs produziria chaves difíceis e raramente corresponde ao que o código de integração realmente deseja, que é o de abordar soap:Body por seu nome prefixo familiar. Se você está processando SOAP ou SVG ou qualquer vocabulário com namespace, os prefixos que você conhece do XML são as chaves que você obtém no JSON.
Seções CDATA - o <![CDATA[ ... ]]> blocos que permitem XML transportar texto bruto com caracteres especiais - são lidos literalmente, sem decodificação de entidade, que é exatamente o seu propósito A <script> ou <description> Envolto em cData para proteger seus e comercial e colchetes, aparecem com esses personagens intactos. Fora da CDATA, entidades padrão (<, &, e amigos) e referências numéricas (é, é) são decodificados para seus personagens reais.
Como você converte XML em JSON com a ferramenta?
Etapa 1: cole seu XML
Qualquer XML bem formado funciona - com ou sem o <?xml ?> Declaração, com ou sem namespaces. A declaração, o doctype, os comentários e as instruções de processamento são reconhecidos e ignorados, para que você possa colar um documento completo diretamente de uma resposta de API ou de um arquivo. O botão Load Sample fornece um catálogo com atributos, elementos aninhados e uma tag repetida, para que você possa ver todos os comportamentos de conversão de uma só vez.
Passo 2: Escolha suas opções
Escolha 2 ou 4 espaços para o JSON. Decida se inclui atributos ou solta-os. E escolher se deseja analisar os tipos: deixe-o desligado e todos os valores permanecem uma string (seguro, sem perdas); ligue-o e números inequívocos e booleanos se tornam números JSON reais e booleanos. Off é o padrão correto quando valores como códigos postais ou IDs podem ter zeros à esquerda que você precisa preservar.
Etapa 3: converter e revisar
O conversor analisa primeiro e relata marcação malformada - uma tag de fechamento incompatível, um elemento não fechado, um bloco CDATA não terminado - com uma mensagem específica em vez de produzir JSON de lixo No sucesso, o JSON aparece com contagens de linha e byte Desnivelar para confirmar que as decisões array-vs-object correspondem às suas expectativas.
Etapa 4: Copie ou faça o download
Copie o JSON para sua área de transferência para colar no código ou baixe-o como .json arquivo. A partir daqui, ele se transforma em um corpo de solicitação, um armazenamento de dados ou o próximo estágio do pipeline. Se a próxima etapa for um formato de configuração, o Conversor JSON para YAML leva mais longe.
Quais são os fluxos de trabalho comuns para esta conversão?
Integrando APIs do Legacy Soap
O SOAP ainda está em toda parte nos sistemas corporativos, bancários, de logística e de governo, e fala exclusivamente sobre XML. Quando um serviço moderno de JavaScript ou Node precisa consumir uma resposta SOAP, converter o envelope XML em JSON é a primeira etapa. A conversão de preservação de namespace significa soap:Body e soap:Envelope Mantenha seus nomes familiares e o tratamento de atributos mantém os metadados que o SOAP adora parar de lado. Esta é a mesma categoria de trabalho de cola abordado no Guia de depuração da API.
Lendo RSS e feeds atom
RSS e feeds Atom são XML, e puxá-los para um aplicativo JavaScript significa convertê-los. um feed <item> os elementos são o caso de tags repetidas do livro - eles se tornam uma matriz JSON de itens, exatamente o que você deseja .map() para renderizar uma lista. Atributos como um gabinete url e type São preservados sob suas teclas prefixadas, para que os feeds de podcast e mídia mantenham seus links de áudio intactos.
Migrando configurações e arquivos de dados
Aplicativos mais antigos armazenam configuração e dados em XML - pense .config Arquivos, mapas de sites, conjuntos de dados exportados, fragmentos de XML do Office Open. Convertê-los em JSON é o primeiro movimento ao modernizar um sistema ou importar dados legados para um armazenamento nativo de JSON. A opção de análise de tipo é útil aqui quando você reconhecer Os campos numéricos são genuinamente numéricos e desejam que eles sejam digitados no destino.
Teste e prototipagem
Quando você & #39; está conectando um fluxo de dados e só precisa ver a forma de uma carga XML como JSON - para projetar uma interface TypeScript, para zombar de uma resposta, para verificar um caminho de campo - uma conversão rápida no navegador bate escrevendo código de analisador descartável Converter, ler a estrutura, escrever seus tipos contra ele.
XML vs JSON: Quando cada formato se encaixa?
| xml | JSON | |
|---|---|---|
| Era Primária e Ecossistema | Empresa, SOAP, documentos | APIs da Web, JavaScript, Config |
| atributos | primeira classe | Nenhum - mapeado para chaves prefixadas |
| matrizes | Nenhuma - tags repetidas implicam listas | primeira classe |
| tipos | todo o texto | Strings, números, booleanos, null |
| comentários | suportado | não está na especificação |
| namespaces | primeira classe | Nenhum - mantido como nomes de chave prefixados |
| verbosidade | Superior - fechando tags, atributos | Inferior - suportes e suportes |
| habitat natural | SOAP, RSS/átomo, formatos de escritório, configuração | APIs REST, dados de front-end, package.json |
O padrão por trás da tabela: XML foi construído para documentos e intercâmbio empresarial onde estrutura, validação e auto-descrição importam; JSON foi construído para a web onde a leveza e um mapa direto para objetos JavaScript importam A direção de conversão é esmagadoramente XML-para-JSON porque o movimento na indústria é de sistemas mais antigos baseados em XML em direção a front-ends e serviços nativos de JSON - você & #39; está encontrando dados legados onde vive e trazendo-os para um pipeline moderno O conjunto mais amplo de ferramentas de formato para esse pipeline está no Guia de ferramentas de codificação.
É seguro converter XML que contém dados confidenciais?
As cargas úteis de integração são densas com coisas que você não deseja vazar: respostas SOAP que carregam registros de clientes, arquivos de configuração com terminais internos e credenciais, exportação de dados com informações pessoais. E é exatamente isso que é colado em conversores online, geralmente na integração média, geralmente com pressa.
o Conversor Toolz.dev analisa e converte inteiramente em seu navegador com um analisador livre de dependência - não DOMParser, nenhuma chamada do servidor, nenhum dado saindo da página. Desconecte sua rede após o carregamento da página e ela ainda funciona. Esse é um fato arquitetônico sobre como a ferramenta é construída, não é uma promessa em um documento de política, e é o primeiro princípio do navegador por trás de toda a caixa de ferramentas, detalhada no Guia de privacidade de dados.
A ressalva padrão se aplica: a conversão do lado do cliente protege a etapa de conversão O que você faz com o JSON depois - onde você o cola, para o que você o envia - é uma decisão separada Mas a própria transformação mantém seu XML em sua máquina.
FAQ
Como faço para converter XML para JSON online?
Cole seu XML no XML to JSON Converter e clique em Converter A ferramenta analisa o XML, converte-o em JSON com o recuo e as opções escolhidas e permite copiar ou baixar o resultado O processamento é 100% no navegador - nada é carregado.
Como os atributos XML são representados na saída JSON?
Os atributos se tornam chaves de objeto prefixadas com @, então um elemento de livro com id="bk101" converte em uma chave "@id". Isso mantém os atributos distintos dos elementos filho. Você pode desativar a saída de atributos inteiramente com a opção Ignorar-Atributos se precisar apenas dos dados do elemento.
Por que alguns elementos XML se tornam arrays e outros ficam objetos?
JSON não tem como marcar que um elemento pode ser repetido, então o conversor usa ocorrência: se uma tag aparecer mais de uma vez sob o mesmo pai, ela se tornará uma matriz e, se ela aparecer uma vez, permanecerá um único objeto. Isso espelha a fonte fielmente, embora signifique que uma lista com um item se parece com um único objeto e não com uma matriz.
O conversor lida com seções cData e entidades XML?
Sim. Os blocos CData são lidos literalmente sem decodificação de entidade, que é o seu objetivo. Fora do CDATA, as entidades padrão como <, >, &, " e ' e referências numéricas de caracteres como é e &é são decodificadas em seus caracteres reais.
Posso converter uma resposta SOAP ou um feed RSS para JSON?
Sim. Envelopes SOAP e feeds RSS ou Atom são XML comuns, então eles convertem como qualquer outro documento As tags namespaced mantêm seu prefixo no nome da chave - sabão: O corpo se torna um & quot; sabão: Corpo" chave - e elementos repetidos como itens RSS se tornam uma matriz JSON sobre a qual você pode mapear.
Os números e booleanos permanecerão como texto após a conversão?
Por padrão, sim, porque o XML não possui um sistema de tipo e valores como "007" ou "1.10" pode ser significativo como texto. Ative a opção de análise de tipo para converter texto numérico e booleano inequívoco em números JSON reais e booleanos quando for isso que você deseja.
É seguro converter XML que contém dados confidenciais?
Sim. o analisador é executado inteiramente em JavaScript no seu navegador - nenhuma solicitação de rede transporta seus dados, nada é registrado ou armazenado e a ferramenta funciona offline XML com registros de clientes, identificadores internos ou segredos de integração nunca sai da sua máquina.
Qual é a diferença entre XML e JSON?
XML é uma linguagem de marcação com tags de abertura e fechamento, atributos, namespaces e comentários, projetados para documentos e troca de dados corporativos. JSON é um formato mais leve construído a partir de objetos, matrizes e valores primitivos e é o padrão para APIs da Web modernas. Converter XML para JSON é comum na integração de sistemas SOAP mais antigos ou baseados em feeds com front-ends JavaScript.
XML e JSON parecem intercambiáveis e são & #39; t, porque JSON não tem atributos, nenhuma matriz-por-repetição, e nenhum texto-ao lado-filhos - o exato coloca uma conversão ingênua silenciosamente perde dados Um conversor que lida com esses casos de propósito dá-lhe JSON que & #39; s fiel à fonte: Cole seu XML, verifique como mapeou os atributos e as tags repetidas e traga dados limpos para o pipeline em vez de uma corrupção plausível.



