JSON para XML utilizando Javascript
estou a tentar converter o JSON para XML, mas não estou a obter a precisão output.In o meu JSON a ter o array object não converte isso em XML array.O objecto principal da matriz não está a converter-se em XML como esperado
var InputJSON = "{"body":{"entry": [{ "fullURL" : "abcd","Resource": "1234"},{ "fullURL" : "efgh","Resource": "5678"}]}}";
var output = eval("OBJtoXML("+InputJSON+");")
function OBJtoXML(obj) {
var xml = '';
for (var prop in obj) {
xml += "<" + prop + ">";
if(obj[prop] instanceof Array) {
for (var array in obj[prop]) {
xml += OBJtoXML(new Object(obj[prop][array]));
}
} else if (typeof obj[prop] == "object") {
xml += OBJtoXML(new Object(obj[prop]));
} else {
xml += obj[prop];
}
xml += "</" + prop + ">";
}
var xml = xml.replace(/<\/?[0-9]{1,}>/g,'');
return xml
}
Produção Efectiva:
<body>
<entry>
<fullURL>abcd</fullURL>
<Resource>1234</Resource>
<fullURL>efgh</fullURL>
<Resource>5678</Resource>
</entry>
</body>
Produção Esperada:
<body>
<entry>
<fullURL>abcd</fullURL>
<Resource>1234</Resource>
</entry>
<entry>
<fullURL>efgh</fullURL>
<Resource>5678</Resource>
</entry>
</body>
Por Favor, guia - me se me faltar alguma coisa do código para obter o meu resultado esperado
0
3 answers
Substitua a sua função OBJtoXML
por
function OBJtoXML(obj) {
var xml = '';
for (var prop in obj) {
xml += obj[prop] instanceof Array ? '' : "<" + prop + ">";
if (obj[prop] instanceof Array) {
for (var array in obj[prop]) {
xml += "<" + prop + ">";
xml += OBJtoXML(new Object(obj[prop][array]));
xml += "</" + prop + ">";
}
} else if (typeof obj[prop] == "object") {
xml += OBJtoXML(new Object(obj[prop]));
} else {
xml += obj[prop];
}
xml += obj[prop] instanceof Array ? '' : "</" + prop + ">";
}
var xml = xml.replace(/<\/?[0-9]{1,}>/g, '');
return xml
}
1
Author: Usman Wali, 2018-02-14 14:28:37
Há alguns problemas aqui, para começar, aqui a variável de cadeia de caracteres JSON ou precisa de ter as suas citações escapadas. Ou ser embrulhado em aspas simples. Por exemplo:
var InputJSON = '{"body":{"entry": [{ "fullURL" : "abcd","Resource": "1234"},{ "fullURL" : "efgh","Resource": "5678"}]}}';
A seguir, não há necessidade de usar eval
aqui, ao usar o JSON em JavaScript você deve usar JSON.parse
// First parse the JSON
var InputJSON = JSON.parse(InputJSON);
// Now execute the 'OBJtoXML' function
var output = OBJtoXML(InputJSON);
Agora que chegamos ao cerne da questão, porque é que só ocorre uma vez?
O problema que você está tendo é que xml += "<" + prop + ">";
e {[7] } só estão acontecendo uma vez por propriedade.
Solucao ficaria assim:
function OBJtoXML(obj) {
var xml = '';
for (var prop in obj) {
xml += "<" + prop + ">";
if(Array.isArray(obj[prop])) {
for (var array of obj[prop]) {
// A real botch fix here
xml += "</" + prop + ">";
xml += "<" + prop + ">";
xml += OBJtoXML(new Object(array));
}
} else if (typeof obj[prop] == "object") {
xml += OBJtoXML(new Object(obj[prop]));
} else {
xml += obj[prop];
}
xml += "</" + prop + ">";
}
var xml = xml.replace(/<\/?[0-9]{1,}>/g,'');
return xml
}
2
Author: scagood, 2018-02-14 14:14:48
var inputJSON = '{"body":{"entry": [{ "fullURL" : "abcd","Resource": "1234"},{ "fullURL" : "efgh","Resource": "5678"}]}}';
var parsedInput = JSON.parse(inputJSON);
function OBJtoXML(obj) {
var xml = '';
for (var prop in obj) {
if (obj[prop] instanceof Array) {
for (var array in obj[prop]) {
xml += '<' + prop + '>';
xml += OBJtoXML(new Object(obj[prop][array]));
xml += '</' + prop + '>';
}
} else {
xml += '<' + prop + '>';
typeof obj[prop] == 'object' ? xml += OBJtoXML(new Object(obj[prop])) : xml += obj[prop];
xml += '</' + prop + '>';
}
}
var xml = xml.replace(/<\/?[0-9]{1,}>/g, '');
return xml;
}
1
Author: Andrei Rosu, 2018-02-15 07:53:38