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?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.
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);
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.
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.
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!
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);
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);
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