如何将 JSON 对象数组转换为有效的 XML?

穆拉特·科利亚兰

假设我有一个像这样的 JSON 对象数组:

const cars = [
    {
        "color": "purple",
        "type": "minivan",
        "registration": "2020-02-03",
        "capacity": 7
      },
      {
        "color": "orange",
        "type": "SUV",
        "registration": "2021-05-17",
        "capacity": 4
      },
      {
        "color": "green",
        "type": "coupe",
        "registration": "2019-11-13",
        "capacity": 2
      }

];

我想将此对象转换为有效的 XML。但是我在转换时使用开始标记作为数组索引的帮助程序包,因此生成的 XML 无效。

例如:(function json2xml来自gossner

function json2xml(o, tab) {
    var toXml = function(v, name, ind) {
       var xml = "";
       if (v instanceof Array) {
          for (var i=0, n=v.length; i<n; i++)
             xml += ind + toXml(v[i], name, ind+"\t") + "\n";
       }
       else if (typeof(v) == "object") {
          var hasChild = false;
          xml += ind + "<" + name;
          for (var m in v) {
             if (m.charAt(0) == "@")
                xml += " " + m.substr(1) + "=\"" + v[m].toString() + "\"";
             else
                hasChild = true;
          }
          xml += hasChild ? ">" : "/>";
          if (hasChild) {
             for (var m in v) {
                if (m == "#text")
                   xml += v[m];
                else if (m == "#cdata")
                   xml += "<![CDATA[" + v[m] + "]]>";
                else if (m.charAt(0) != "@")
                   xml += toXml(v[m], m, ind+"\t");
             }
             xml += (xml.charAt(xml.length-1)=="\n"?ind:"") + "</" + name + ">";
          }
       }
       else {
          xml += ind + "<" + name + ">" + v.toString() +  "</" + name + ">";
       }
       return xml;
    }, xml="";
    for (var m in o)
       xml += toXml(o[m], m, "");
    return tab ? xml.replace(/\t/g, tab) : xml.replace(/\t|\n/g, "");
 }
 


const cars = [
{
    "color": "purple",
    "type": "minivan",
    "registration": "2020-02-03",
    "capacity": 7
  },
  {
    "color": "orange",
    "type": "SUV",
    "registration": "2021-05-17",
    "capacity": 4
  },
  {
    "color": "green",
    "type": "coupe",
    "registration": "2019-11-13",
    "capacity": 2
  }

];

console.log(json2xml(cars, ' '));

我尝试了xml2jsfast-xml-parserjstoxml包。结果是一样的。

编辑:

预期的 XML:

<element> 
    <color>purple</color>
    <type>minivan</type>
    <registration>2020-02-03</registration>
    <capacity>7</capacity>
</element>
<element>
    <color>orange</color>
    <type>SUV</type>
    <registration>2021-05-17</registration>
    <capacity>4</capacity>
</element>
<element>
    <color>green</color>
    <type>coupe</type>
    <registration>2019-11-13</registration>
    <capacity>2</capacity>
</element>
约翰

这个怎么样?

这假设 JSON 对象数组都具有相同的键。

let xml = "";

const prefixXML = `<?xml version="1.0" encoding="UTF-8"?>\n<cars>\n`;
const suffixXML = "\n</cars>";

const keys = Object.keys(cars[0]);

cars.forEach((car) => {
  let valueXML = keys
    .map((key) => {
      return `<${key}>${car[key]}</${key}>`;
    })
    .join("\n\t");
  xml += `
    <car>
      ${valueXML}
    </car>
  `;
});

const final = prefixXML + xml + suffixXML;

console.log(final);

XML 输出是:

<?xml version="1.0" encoding="UTF-8"?>
<cars>

    <car>
        <color>purple</color>   
    <type>minivan</type>    
    <registration>2020-02-03</registration> 
    <capacity>7</capacity>  
    </car>
  
    <car>
        <color>orange</color>   
    <type>SUV</type>    
    <registration>2021-05-17</registration> 
    <capacity>4</capacity>  
    </car>
  
    <car>
        <color>green</color>    
    <type>coupe</type>  
    <registration>2019-11-13</registration> 
    <capacity>2</capacity>  
    </car>
  
</cars> 

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将数组转换为有效的json

Mule 4:XML 转换:如何将具有相同名称和属性的多个节点的 XML 转换为有效的 JSON 作为输出?

如何将jSON转换为XML

如何将XML转换为JSON

如何将 JSON 数组有效负载转换为具有特定字段的对象和具有日期的数组?

如何将JS对象转换为有效的JSON文件并使用AJAX将其检索回来?

如何将JSON转换为XML或将XML转换为JSON?

如何将部分无效的JSON转换为有效的JSON?

如何将完整的 JSON 格式转换为 XML

如何将XML转换为JSON AWS API Gateway?

如何将 XML 日期转换为有效的日期时间?

将显式 JSON 有效负载转换为数组驱动的通用有效负载?

如何将json对象转换为json数组?

GSON。如何将json对象转换为json数组?

如何将数组转换为json数组对象

如何将 JSON 数组转换为 javascript 对象数组?

JS:将值从 textarea 转换为有效的 JSON 对象

将字符串转换为有效的JSON对象

Android Room:将json结果转换为db对象的有效方法

将无效的 Json 转换为有效的 Json

将Marshall JSON Slice转换为有效JSON

将无效的Json转换为有效的json android?

如何在python中将telethon对象转换为有效的JSON

如何将数组转换为json对象?

如何将JSON对象转换为JavaScript数组?

如何将JSON数组转换为对象

如何将JSON对象转换为Typescript数组?

如何将JSON对象转换为Javascript数组

如何将数组转换为json对象?