XML para JSON

XML e JSON modelam dados de maneira diferente: XML tem atributos e conteúdo misto, JSON tem objetos e arrays. Converter sem perda requer uma convenção. Esta ferramenta oferece três: compacto (descarta atributos), Badgerfish (atributos sob @key, texto sob $) e literal (cada nó XML se torna um objeto JSON com total fidelidade). Escolha o que corresponde ao consumidor JSON que você está visando.

Como converter XML para JSON

  1. 1

    Cole XML

    Qualquer XML bem formado. Os namespaces são preservados.

  2. 2

    Escolha o estilo de conversão

    Compacto, Badgerfish ou literal/sem perda.

  3. 3

    Trate arrays

    Force certos elementos a serem sempre arrays (configurável).

  4. 4

    Copie a saída JSON

    Formatada ou minificada, sua escolha.

Os três estilos comparados

Entrada:

<book id="1" lang="en">
  <title>1984</title>
  <author>Orwell</author>
</book>

Compacto (descarta atributos):

{
  "book": {
    "title": "1984",
    "author": "Orwell"
  }
}

Badgerfish (atributos sob @, texto sob $):

{
  "book": {
    "@id": "1",
    "@lang": "en",
    "title": { "$": "1984" },
    "author": { "$": "Orwell" }
  }
}

Literal / JsonML-ish (total fidelidade):

{
  "book": {
    "@attributes": { "id": "1", "lang": "en" },
    "title": "1984",
    "author": "Orwell"
  }
}

Arrays forçados

XML não tem como dizer “esta é uma lista de um”. Uma sequência de um único elemento parece idêntica a um escalar:

<items>
  <item>A</item>
</items>

Isso pode ser serializado como {"item": "A"} ou {"item": ["A"]}. O conversor permite que você marque nomes de elementos (por XPath) como sempre-arrays, para que seu consumidor JSON downstream receba tipos consistentes.

Conteúdo misto

Conteúdo misto, texto intercalado com elementos filhos, é o único lugar onde qualquer conversão de XML para JSON perde informações:

<p>Olá <em>mundo</em>!</p>

A maioria dos estilos ou descarta texto ou o colapsa. O estilo literal preserva a ordem via um array:

{
  "p": {
    "@content": ["Olá ", { "em": "mundo" }, "!"]
  }
}

Inferência de tipo

Por padrão, os valores são strings. Ative “analisar numérico/booleano” e o conversor irá converter 42, 3.14, true, false para os tipos JSON correspondentes. Tenha cuidado: um atributo XML id="007" se torna 7 com a conversão ativada, o que você provavelmente não deseja.

Quando escolher qual

  • Compacto: para JSON legível por humanos onde atributos são ruído.
  • Badgerfish: quando você precisa de atributos e texto na mesma profundidade que filhos.
  • Literal: quando você deve retornar ao XML sem perda.

Perguntas frequentes

Quando um elemento aparece uma vez, o conversor padrão é objeto; duas ou mais vezes, array. Use a opção de forçar array para torná-lo consistente se seu consumidor esperar uma forma.

Os prefixos de namespace são preservados nas chaves (ns:title) a menos que você ative “remover namespaces”. As declarações se tornam atributos @xmlns:ns no elemento raiz.

O modo literal é o mais próximo do sem perda, mas a ordenação do conteúdo misto entre elementos e texto é complicada. O modo compacto definitivamente perde atributos. Badgerfish é um meio-termo pragmático.

Não. A conversão é feita no seu navegador.

Ferramentas relacionadas

Ferramenta disponível em outros idiomas