JSON 到 XML Node JS 服务中的转换(使用 xml2js)

JSON to XML conversion in Node JS service (using xml2js)

我需要在 Node js 中进行一些 help/advice 与 JSON 到 XML 的转换。 我有一项服务在需要转换为 XML 的请求正文中获取 JSON 对象。我能够使用 node-xml2js for json inputs with maximum one level of nested objects. But, it gets way more complicated with nested objects having attribute values. Attributes should be identified first, prefixed with $ sign and enclosed in curly braces before parsing through xml2js 获得正确的 xml 来实现这一点。 有没有更好的方法可以简化重新格式化 json 输入的复杂层? xml2js 可以转换为:

{
    "Level1":{  "$":{   "attribute":"value" },
                "Level2": {"$":{"attribute1":"05/29/2020",
                            "attribute2":"10","attribute3":"Pizza"}}
}

对此:(这是正确的):

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Level1 attribute="value">
  <Level2 attribute1="05/29/2020" attribute2="10" attribute3="Pizza"/>
</Level1>

但实际 json 输入是这样的:

{
    "Level1":{"attribute":"value",
              "Level2": {"attribute1":"05/29/2020",
                         "attribute2":"10","attribute3":"Pizza"} }
}

预期相同的结果:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Level1 attribute="value">
  <Level2 attribute1="05/29/2020" attribute2="10" attribute3="Pizza"/>
</Level1>

如果您处理过类似的需求,请告诉我。感谢任何帮助。 谢谢你。

这将是一种将对象改回库中预期格式的方法,尽管它假定所有非对象键都应该是属性(这对您的应用程序来说是有效的假设吗?)

function groupChildren(obj) {
  for(prop in obj) {
    if (typeof obj[prop] === 'object') {
      groupChildren(obj[prop]);
    } else {
      obj['$'] = obj['$'] || {};
      obj['$'][prop] = obj[prop];
      delete obj[prop];
    }
  }

  return obj;
}

然后像这样使用:

var xml2js = require('xml2js'); 
var obj = {
  Level1: {
    attribute: 'value',
    Level2: {
      attribute1: '05/29/2020',
      attribute2: '10',
      attribute3: 'Pizza'
    }
  }
};

var builder = new xml2js.Builder();
var xml = builder.buildObject(groupChildren(obj));

打印出:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Level1 attribute="value">
  <Level2 attribute1="05/29/2020" attribute2="10" attribute3="Pizza"/>
</Level1>

你可以使用这个库:nashwaan/xml-js

像这样:

  let xmlJ=require('xml-js');
  let parseToJson=(xml)=>{
        return new Promise(resolve => {
              let convert;
         
              convert=xmlJ.xml2json(xml,{compact:true});
              resolve(convert);
    
   });
 };