Converter XML para JSON (e voltar) usando Javascript

Como você converteria de XML para JSON e depois voltaria para XML?

As ferramentas a seguir funcionam muito bem, mas não são completamente consistentes:

Alguém já encontrou essa situação antes?

Eu acho que este é o melhor: Conversão entre XML e JSON

Não deixe de ler o artigo que o acompanha no site xml.com O’Reilly , que detalha os problemas com essas conversões, o que acho que você vai achar esclarecedor. O fato de O’Reilly estar hospedando o artigo deve indicar que a solução de Stefan tem mérito.

https://github.com/abdmob/x2js – minha própria biblioteca (URL atualizado de http://code.google.com/p/x2js/ ):

Esta biblioteca fornece funções de conversão XML para JSON (objects JavaScript) e vice-versa. A biblioteca é muito pequena e não requer outras bibliotecas adicionais.

Funções da API

  • new X2JS () – para criar sua instância para acessar toda a funcionalidade da biblioteca. Além disso, você pode especificar opções de configuração opcionais aqui
  • X2JS.xml2json – Converte XML especificado como object DOM para JSON
  • X2JS.json2xml – Converter JSON para object DOM XML
  • X2JS.xml_str2json – Converte XML especificado como string para JSON
  • X2JS.json2xml_str – Converter JSON para string XML

Demonstração online em http://jsfiddle.net/abdmob/gkxucxrj/1/

var x2js = new X2JS(); function convertXml2JSon() { $("#jsonArea").val(JSON.stringify(x2js.xml_str2json($("#xmlArea").val()))); } function convertJSon2XML() { $("#xmlArea").val(x2js.json2xml_str($.parseJSON($("#jsonArea").val()))); } convertXml2JSon(); convertJSon2XML(); $("#convertToJsonBtn").click(convertXml2JSon); $("#convertToXmlBtn").click(convertJSon2XML); 

Essas respostas me ajudaram muito a fazer essa function:

 function xml2json(xml) { try { var obj = {}; if (xml.children.length > 0) { for (var i = 0; i < xml.children.length; i++) { var item = xml.children.item(i); var nodeName = item.nodeName; if (typeof (obj[nodeName]) == "undefined") { obj[nodeName] = xml2json(item); } else { if (typeof (obj[nodeName].push) == "undefined") { var old = obj[nodeName]; obj[nodeName] = []; obj[nodeName].push(old); } obj[nodeName].push(xml2json(item)); } } } else { obj = xml.textContent; } return obj; } catch (e) { console.log(e.message); } } 

Contanto que você passe em um object jquery dom / xml: para mim foi:

 Jquery(this).find('content').eq(0)[0] 

onde o conteúdo era o campo em que eu estava armazenando meu xml.

Um tempo atrás eu escrevi esta ferramenta https://bitbucket.org/surenrao/xml2json para o meu aplicativo TV Watchlist, espero que isso ajude também.

Synopsys: Uma biblioteca para não apenas converter xml para json, mas também é fácil de depurar (sem erros circulares) e recriar json de volta para xml. Características: – Analisar xml para o object json. Imprima o object json de volta para xml. Pode ser usado para salvar xml no IndexedDB como objects X2J. Imprima o object json.

Eu pessoalmente recomendaria essa ferramenta . É um conversor XML para JSON.

É muito leve e está em JavaScript puro. Não precisa de dependencies. Você pode simplesmente adicionar as funções ao seu código e usá-lo como quiser.

Também leva os atributos XML em considerações.

 var xml = 'John Doe'; var json = xml2json(xml); console.log(json); // prints '{“person”: {“id”: “1234”, “age”: “30”, “name”: “John Doe”}}' 

Aqui está uma demonstração online !

Disclaimer: Eu escrevi fast-xml-parser

O Fast XML Parser pode ajudar a converter XML em JSON e vice-versa. Aqui está o exemplo;

 var options = { attributeNamePrefix : "@_", attrNodeName: "attr", //default is 'false' textNodeName : "#text", ignoreAttributes : true, ignoreNameSpace : false, allowBooleanAttributes : false, parseNodeValue : true, parseAttributeValue : false, trimValues: true, decodeHTMLchar: false, cdataTagName: "__cdata", //default is 'false' cdataPositionChar: "\\c", }; if(parser.validate(xmlData)=== true){//optional var jsonObj = parser.parse(xmlData,options); } 

Se você deseja analisar o object JSON ou JS no XML,

 //default options need not to set var defaultOptions = { attributeNamePrefix : "@_", attrNodeName: "@", //default is false textNodeName : "#text", ignoreAttributes : true, encodeHTMLchar: false, cdataTagName: "__cdata", //default is false cdataPositionChar: "\\c", format: false, indentBy: " ", supressEmptyNode: false }; var parser = new parser.j2xParser(defaultOptions); var xml = parser.parse(json_or_js_obj); 

Aqui está uma boa ferramenta de uma biblioteca npm documentada e muito famosa que faz o xml <-> js muito bem: diferentemente de algumas (talvez todas) das soluções propostas acima, ela converte comentários xml também.

 var obj = {name: "Super", Surname: "Man", age: 23}; var builder = new xml2js.Builder(); var xml = builder.buildObject(obj); 

A melhor maneira de fazer isso usando o lado do servidor como cliente não funciona bem em todos os cenários. Eu estava tentando construir json on-line para xml e xml para json conversor usando javascript e me senti quase impossível, pois não estava funcionando em todos os cenários. Em última análise, acabei fazendo o lado do servidor usando Newtonsoft em ASP.MVC. Aqui está o conversor online http://techfunda.com/Tools/XmlToJson