使用Javascript将JSON转换为XML
使用Javascript将JSON转换为XML
我正在尝试将JSON转换为XML,但是没有得到准确的输出。在我的JSON中,有一个数组对象,但它没有被转换为XML数组。主要问题是数组对象没有按预期转换为XML。
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
}
实际输出:
期望输出:
请指导我是否漏掉了代码中的任何内容以获得我期望的结果。
问题:如何使用JavaScript将JSON转换为XML?
原因:从给出的内容来看,存在几个问题。首先,JSON字符串变量需要对引号进行转义,或者用单引号括起来。其次,在JavaScript中使用JSON时,不需要使用eval函数,应该使用JSON.parse函数。最后,问题出现在entry
只出现一次的地方。
解决方法:解决方法如下所示:
1. 首先,需要对JSON字符串变量进行引号处理:
var InputJSON = '{"body":{"entry": [{ "fullURL" : "abcd","Resource": "1234"},{ "fullURL" : "efgh","Resource": "5678"}]}}';
2. 接下来,使用JSON.parse函数解析JSON:
// 首先解析JSON var InputJSON = JSON.parse(InputJSON); // 然后执行'OBJtoXML'函数 var output = OBJtoXML(InputJSON);
3. 问题出现在entry
只出现一次的地方。解决方法如下所示:
function OBJtoXML(obj) { var xml = ''; for (var prop in obj) { xml += "<" + prop + ">"; if(Array.isArray(obj[prop])) { for (var array of obj[prop]) { // 修复问题的方法 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 }
通过以上方法,可以使用JavaScript将JSON转换为XML。
使用xml-js库进行JSON到XML的转换。该问题的出现原因是需要将一个包含特殊字符的JSON对象转换为XML格式,但是直接使用json2xml函数转换时,特殊字符会被转义。解决方法是在调用json2xml函数时,传入一个配置对象,将compact属性设置为true。这样可以保持特殊字符的原样,并将JSON转换为XML格式。
代码示例:
import { json2xml } from "xml-js"; const input = { contact: { name: `John & cia "example"` } }; const xml = json2xml(input, { compact: true }); // <contact><name>John & cia \"example\"</name></contact>
以上代码使用了xml-js库中的json2xml函数将input对象转换为XML格式,并将结果保存在xml变量中。通过设置compact为true,特殊字符保持原样,并且生成的XML格式的字符串。
详细示例可以参考以下链接:
[https://codesandbox.io/s/xml-json-forked-zgit4?file=/src/index.js:97-103](https://codesandbox.io/s/xml-json-forked-zgit4?file=/src/index.js:97-103)
🙂
问题的出现原因是原来的OBJtoXML
函数无法处理属性或属性中包含斜杠(slash)和&符号的情况,导致生成的XML是无效的。
解决方法是替换原来的OBJtoXML
函数为新的函数,代码如下:
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 }
通过这种方式,可以解决原来函数无法正确处理斜杠和&符号的问题,生成有效的XML。