【问题标题】:How to convert JSON data to XML?如何将 JSON 数据转换为 XML?
【发布时间】:2019-12-15 20:47:21
【问题描述】:

我目前正在将从外部 API 接收到的 json 转换为 XML,并且 XML 由我的 API 返回:

     var result = util.getAdis(firstName, lastName, dob, function(err,response,data){
        if(!err) {
            var data = JSON.parse(data);
            var root = builder.create('ADIS')
            data.forEach(person => {
                var item = root.ele('person');
                item.att('GivenName', person.GivenName);
                item.att('MiddleInitial', person.MiddleInitial);
                item.att('Surname', person.Surname);
                item.att('Event', person.Event);
                item.att('EventDate', person.EventDate);
            })
            var xml = root.end({ pretty: true });
            res.type('application/xml');
            res.send(xml);   
        } else {
            console.log(err)
            res.send(500)
        }
    });

我正在使用an XML builder,效果很好。但是有没有更好的方法来编写这段代码?所以它是动态的,我不想手动分配每个元素。

JSON 看起来像这样:

[{
    GivenName: 'Mable',
    MiddleInitial: 'G',
    Surname: 'Stewart',
    Event: 'A',
    EventDate: '2014-07-16',
}]

【问题讨论】:

标签: javascript json xml


【解决方案1】:

按照package的用法,第一个例子,他们向我们展示了使用.ele函数的方法。

.ele('node_name', {node_attr_object: attr_value} , 'node_value')

在您的情况下,您需要创建一个名为person 的节点,其所有属性都是data 项的属性,然后在循环中,您只需将该对象作为ele 函数的第二个参数手动设置每个属性。

var result = util.getAdis(firstName, lastName, dob, function (err, response, data) {
  if (!err) {
    var data = JSON.parse(data);
    var root = builder.create('ADIS')
    data.forEach(person => {
      root.ele('person', person);
    })
    var xml = root.end({ pretty: true });
    res.type('application/xml');
    res.send(xml);
  } else {
    console.log(err)
    res.send(500)
  }
});

有数据是

[{
    GivenName: 'Mable',
    MiddleInitial: 'G',
    Surname: 'Stewart',
    Event: 'A',
    EventDate: '2014-07-16',
}]

你会得到一个像这样的 xml 字符串:

<?xml version="1.0"?>
<ADIS>
  <person GivenName="Mable" MiddleInitial="G" Surname="Stewart" Event="A" EventDate="2014-07-16"/>
</ADIS>

【讨论】:

    【解决方案2】:

    这是一个很棒的 npm 模块,每周有 800 万次下载。
    他们在自己的 wiki 上写到convert Array/Object

    这是Conversion from Array 的示例。
    您可以在RunKit 尝试它

    var builder = require("xmlbuilder")
    
    var data = [{
        GivenName: 'Mable',
        MiddleInitial: 'G',
        Surname: 'Stewart',
        Event: 'A',
        EventDate: '2014-07-16',
    }]
    
    var xml = builder.create('ADIS')
      .ele({ person: data })
      .end({ pretty: true})
    
    console.log(xml)
    // <?xml version="1.0"?>
    // <ADIS>
    //   <person>
    //     <GivenNam…  <EventDate>2014-07-16</EventDate>
    //   </person>
    // </ADIS>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-31
      相关资源
      最近更新 更多