Non
Non

Reputation: 8589

Assign new values to object after converting XML into JSON

I am converting some XML attributes into JSON.

This is the whole function and below I am going to explain it step by step

    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);
        });
      }
    });

This is what I am receiving on this 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>'
}

as you might see, there are some props beginning with XX_ which contains XML attributes, so had to convert those XML attributes into json like this

        _.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);
                });
              }
            }
          });
        });

now this console.log(toJsonRes); returns this (this is the XML elements but now in JSON format)

{ 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' ] } }

so, just to give you a better view:

before:

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>'

after:

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

what I want to know is, what should I do to declare those new values in order to put them instead of the old XML attributes ?

Upvotes: 1

Views: 37

Answers (1)

Buzinas
Buzinas

Reputation: 11733

When you're parsing the string, you can already change the item's XX(...) property:

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

Upvotes: 1

Related Questions