将XML转换为JSON后,为对象分配新值

时间:2015-09-22 18:49:40

标签: javascript json xml node.js

我正在将一些XML属性转换为JSON。

这是整个功能,下面我将逐步解释

    request.execute('[someSP].[spSomeSP]', function(err, dataset) {

      if (err) {
        reject(err);
      }
      if (request.parameters.param_GRID_REPORT_ID.value !== null) {
        _.forEach(dataset, function(items) {
          _.forEach(items, function(item) {
            for (var key in item) {
              if (key.indexOf('XX') === 0) {
                var toJsonVar = item[key], toJsonRes;
                parseString(toJsonVar, function(err, res) {
                  toJsonRes = res;
                  console.log(toJsonRes);
                });
              }
            }
          });
        });
        _.forEach(dataset, function(report) {
          console.log(report);
          fullfill(report);
        });
      }
    });

这是我在console.log(report);

上收到的内容
{ BET: 57635034,
  CUSTOMER: 181645,
  SPORT: 'NFL',
  XX_FILL_OPEN: '<element>\r\n\t<element_type>wager_action_button</element_type>\t\r\n\t<element_name>Fill Open</element_name>\r\n\t<element_call>fillOpen(57635034)</element_call>\r\n\t<element_content></element_content>\r\n</element>',
  XX_VIEW: '<element>\r\n\t<element_type>betslip_selection_checkbox</element_type>\t\r\n\t<element_name></element_name>\r\n\t<element_call>addRemoveSelectionFromSlip_checkbox(1738756,0,1,1)</element_call>\r\n\t<element_content>0</element_content>\r\n</element>'
}

正如您可能看到的,有些道具以XX_开头,其中包含XML属性,因此必须将这些XML属性转换为json,如下所示

        _.forEach(dataset, function(items) {
          _.forEach(items, function(item) {
            for (var key in item) {
              if (key.indexOf('XX') === 0) {
                var toJsonVar = item[key], toJsonRes;
                parseString(toJsonVar, function(err, res) {
                  toJsonRes = res;
                  console.log(toJsonRes);
                });
              }
            }
          });
        });

现在这个console.log(toJsonRes);返回这个(这是XML元素,但现在是JSON格式)

{ element: 
   { element_type: [ 'wager_action_button' ],
     element_name: [ 'Fill Open' ],
     element_call: [ 'fillOpen(57635034)' ],
     element_content: [ '' ] } }
{ element: 
   { element_type: [ 'betslip_selection_checkbox' ],
     element_name: [ '' ],
     element_call: [ 'addRemoveSelectionFromSlip_checkbox(1738756,0,1,1)' ],
     element_content: [ '0' ] } }

所以,只是为了给你一个更好的观点:

之前:

XX_FILL_OPEN: '<element>\r\n\t<element_type>wager_action_button</element_type>\t\r\n\t<element_name>Fill Open</element_name>\r\n\t<element_call>fillOpen(57635034)</element_call>\r\n\t<element_content></element_content>\r\n</element>'

后:

{ element: 
   { element_type: [ 'wager_action_button' ],
     element_name: [ 'Fill Open' ],
     element_call: [ 'fillOpen(57635034)' ],
     element_content: [ '' ] } }

我想知道的是,我应该怎么做才能声明这些新值,而不是旧的XML属性?

1 个答案:

答案 0 :(得分:1)

当您解析字符串时,您已经可以更改项目的XX(...)属性:

parseString(toJsonVar, function(err, res) {
  item[key] = res;
});