Pular para o conteúdo principal
PulsarKit

Converter XML para JSON

Transforme XML em JSON, com atributos, CDATA e namespaces tratados do jeito que você escolher e erros de sintaxe que indicam a linha exata.

Solte seus arquivos aqui

.xml, .rss, .svg, .xhtml, .txt · até 300 MB

Atributos
Mais configurações

Como Converter para JSON

  1. 1

    Solte um arquivo XML

    Adicione um arquivo ou até vinte. Feeds RSS, desenhos SVG e páginas XHTML também são XML e são lidos da mesma forma.

  2. 2

    Escolha como mapear atributos e repetições

    Os atributos podem ganhar um prefixo, ficar agrupados em uma única chave ou ser ignorados. As tags repetidas podem virar arrays sempre ou só quando de fato se repetem.

  3. 3

    Converta e baixe o JSON

    Clique no botão e salve o resultado indentado. Um lote de arquivos volta em um único arquivo ZIP.

Um elemento ou uma lista de um só

A parte delicada de qualquer mapeamento de XML para JSON é a lista com um único membro: um <order> com três filhos <item> vira, é claro, um array, mas o mesmo documento com um só item parece um objeto simples, e o código que percorre essa lista quebra logo no primeiro cliente de verdade. Por isso, a regra dos arrays é uma configuração explícita, e não uma heurística escondida, e por isso você pode forçar todos os filhos a virar arrays.

Números que não são números

A detecção automática de tipos transforma 42 em número e true em booleano, o que costuma ser o que você quer e, de vez em quando, um desastre. Um código de peça 00123 não pode virar 123, e um identificador fiscal de vinte dígitos não pode ser arredondado para notação científica. Por isso, valores com zeros à esquerda e sequências de dígitos com mais de quinze caracteres continuam como strings, e desativar a detecção de tipos mantém cada valor exatamente como foi escrito.

Declarações de entidade são recusadas

Um DOCTYPE com uma declaração <!ENTITY> é rejeitado antes de a análise começar. Dez entidades aninhadas, cada uma citando a anterior dez vezes, se expandem em gigabytes de texto e travam a aba: é o clássico ataque billion laughs. Aqui nada é expandido além das cinco entidades predefinidas e das referências numéricas de caracteres, então o ataque não tem em que se desdobrar.

Analisado aqui, e não em outro lugar

O analisador roda no seu navegador, em um worker (processo em segundo plano), com o código que veio junto com a página. Seu XML nunca é enviado, então não há cópia em servidor para apagar, fila para esperar nem log com que se preocupar. Quando a aba é fechada, o documento e o JSON gerado a partir dele desaparecem.

Perguntas frequentes

Onde ficam os atributos do XML no JSON?

Por padrão, cada atributo vira uma chave no mesmo objeto dos filhos do elemento, com o prefixo @_, para não colidir com uma tag filha de mesmo nome. Você também pode reunir todos os atributos em um subobjeto @attributes, o que deixa o conteúdo do elemento limpo, ou descartar os atributos de vez.

Por que um elemento que aparece uma só vez não vira array?

Porque nada no documento diz que aquilo é uma lista. Com a regra padrão, uma tag só vira array quando de fato aparece mais de uma vez sob o mesmo pai, o que reflete o arquivo com exatidão. Se o código que consome o JSON precisa de uma estrutura fixa, mude a configuração de arrays para “sempre”, e até um filho sozinho chega como um array de um elemento.

O que acontece com as seções CDATA?

Por padrão, o conteúdo CDATA é mesclado ao texto do elemento, já que CDATA é só uma forma de delimitar texto, e não um tipo de dado à parte. Se você precisa saber que parte de um valor foi delimitada assim, por exemplo para gerar o XML de novo mais tarde, mude para “separado”, e ele vai para uma chave #cdata própria.

Posso remover os prefixos de namespace?

Sim. Remover os namespaces transforma dc:title em title, o que deixa formatos de feed e de documento muito mais fáceis de acessar no código. Deixe essa opção desligada se dois namespaces diferentes usam o mesmo nome local no mesmo arquivo, porque aí o prefixo é a única coisa que mantém as chaves separadas.

Por que aparece um erro sobre entidades personalizadas?

Porque um documento que declara as próprias entidades no DOCTYPE é recusado, e não expandido. Essa é a única defesa confiável contra bombas de expansão de entidades, que podem transformar alguns kilobytes em gigabytes de memória. Remova o bloco DOCTYPE, e o resto do documento é convertido normalmente.

Funciona com feeds RSS e arquivos SVG?

Sim, os dois são XML comum. Um feed RSS vira um objeto com os metadados do canal e um array de itens, uma estrutura prática para trabalhar. Um SVG vira a sua árvore de elementos, com todos os atributos de apresentação intactos, o que ajuda a inspecionar ou reescrever desenhos por código.

E se o XML tiver um erro de sintaxe?

Você recebe a linha, a coluna e a tag envolvida, por exemplo “tag de fechamento esperada na linha 214, coluna 5”, em vez de uma simples falha de análise. Em um arquivo com dezenas de milhares de elementos, essa diferença é tudo, porque diz onde procurar.

Meu arquivo é enviado para algum lugar?

Não. Decodificação, validação e conversão rodam localmente, na aba do seu navegador. Nenhum servidor participa em etapa alguma, então não sobra cópia do seu documento em lugar nenhum depois que você fecha a página.

Ferramentas relacionadas