使用Javascript将JSON转换为XML

10 浏览
0 Comments

使用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 += "";

}

var xml = xml.replace(/<\/?[0-9]{1,}>/g,'');

return xml

}

实际输出:

abcd

1234

efgh

5678

期望输出:

abcd

1234

efgh

5678

请指导我是否漏掉了代码中的任何内容以获得我期望的结果。

0
0 Comments

问题:如何使用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 += "";
                xml += "<" + prop + ">";
                xml += OBJtoXML(new Object(array));
            }
        } else if (typeof obj[prop] == "object") {
            xml += OBJtoXML(new Object(obj[prop]));
        } else {
            xml += obj[prop];
        }
        xml += "";
    }
    var xml = xml.replace(/<\/?[0-9]{1,}>/g,'');
    return xml
}

通过以上方法,可以使用JavaScript将JSON转换为XML。

0
0 Comments

使用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 &amp; 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)

🙂

0
0 Comments

问题的出现原因是原来的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 += "";
      }
    } else if (typeof obj[prop] == "object") {
      xml += OBJtoXML(new Object(obj[prop]));
    } else {
      xml += obj[prop];
    }
    xml += obj[prop] instanceof Array ? '' : "";
  }
  var xml = xml.replace(/<\/?[0-9]{1,}>/g, '');
  return xml
}

通过这种方式,可以解决原来函数无法正确处理斜杠和&符号的问题,生成有效的XML。

0