Converter XML para JSON (e voltar) usando Javascript

Como converter de XML para JSON e depois voltar para XML?

as seguintes ferramentas funcionam muito bem, mas não são completamente consistentes:

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

Author: Bhargav Rao, 2009-11-21

8 answers

Acho que esta é a melhor: conversão entre XML e JSON

Não se esqueça de ler o artigo que acompanha o xml.com O'Reilly site, que vai em detalhes dos problemas com essas conversões, que eu acho que você vai achar esclarecedor. O facto de o O'Reilly estar a apresentar o artigo deve indicar que a solução do Stefan tem mérito.

 82
Author: Josh Stodola, 2014-04-11 09:51:22

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

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

Funções API

  • novo X2JS () - para criar a sua instância para aceder a todas as funcionalidades da biblioteca. Também pode especificar opcional opções de configuração aqui
  • X2JS.xml2json-Convert XML indicado como objecto DOM para JSON
  • X2JS.json2xml-Convert JSON to XML DOM Object
  • X2JS.xml_ str2json-Convert XML indicado como texto para JSON
  • X2JS.json2xml_ Str-Convert JSON para XML string

Demo 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);
 40
Author: abdolence, 2015-12-29 17:25:43

Estas respostas ajudaram-me muito a fazer esta função:

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);
  }
}

Desde que passe num objecto jQuery dom / xml: para mim foi:

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

Onde o conteúdo era o campo onde estava a guardar o meu xml.

 15
Author: Ryan Conrad, 2014-08-13 22:35:42
Há uns tempos, escrevi esta ferramenta. https://bitbucket.org/surenrao/xml2json para a minha aplicação na TV Watchlist, espero que isto também ajude.

Synopsys: uma biblioteca para não só converter xml para json, mas também é fácil de depurar (sem erros circulares) e recriar json de volta para xml. Características: - processar xml para o objeto json. Imprime o objecto json de volta ao xml. Pode ser usado para salvar xml no IndexedDB como objetos X2J. Imprime o objecto json.

 2
Author: surya, 2013-09-02 02:30:39

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

É muito leve e está em JavaScript puro. Não precisa de dependências. 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 = ‘<person id=”1234” age=”30”><name>John Doe</name></person>’;
var json = xml2json(xml); 

console.log(json); 
// prints ‘{“person”: {“id”: “1234”, “age”: “30”, “name”: “John Doe”}}’
Aqui está uma demonstração online!
 2
Author: Samuel Bourgault, 2016-01-22 20:12:15

Aviso: eu escrevi rápido-xml-analisador

O analisador XML rápido pode ajudar a converter XML para 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 quiser processar o objecto JSON ou JS em XML, então

//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);
 0
Author: Amit Kumar Gupta, 2018-02-17 03:03:10

Aqui ' Uma boa ferramenta de uma biblioteca npm documentada e muito famosa que faz as conversões xml js muito bem: diferentemente de algumas (talvez todas) das soluções propostas acima, converte também comentários xml.

var obj = {name: "Super", Surname: "Man", age: 23};

var builder = new xml2js.Builder();
var xml = builder.buildObject(obj);
 0
Author: SimoneMSR, 2018-08-28 18:23:25

A melhor maneira de o fazer usando o lado do servidor como lado do cliente não funciona bem em todos os cenários. Eu estava tentando construir JSON on-line para xml e xml para JSON converter usando javascript e eu 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.Acidente de viação. Aqui está o Conversor online http://techfunda.com/Tools/XmlToJson

 -2
Author: Sheo Narayan, 2015-06-05 15:34:08