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

问题描述 投票:0回答:2

我需要有关Node js中JSON到XML转换的一些帮助/建议。我有一个在请求正文中获取JSON对象的服务,该服务需要转换为XML。我可以使用node-xml2js来实现具有最多一级嵌套对象的json输入。但是,使用具有属性值的嵌套对象会使情况变得更加复杂。在通过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>

[请让我知道您是否从事过类似的要求。感谢任何帮助。谢谢。

node.js json xml-parsing xml2js xml-builder
2个回答
0
投票
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>

0
投票
喜欢这个:

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

© www.soinside.com 2019 - 2024. All rights reserved.