Преобразование JSON в XML в службе Node JS (с использованием xml2 js) - PullRequest
0 голосов
/ 29 мая 2020

Мне нужна помощь / совет по преобразованию JSON в XML в Node js. У меня есть служба, которая получает объект JSON в теле запроса, который необходимо преобразовать в XML. Я могу добиться этого, используя node-xml2 js для json входов с максимум одним уровнем вложенных объектов. Но все становится намного сложнее с вложенными объектами, имеющими значения атрибутов. Атрибуты должны быть идентифицированы первыми, с префиксом $ знак и заключены в фигурные скобки перед анализом через xml2 js для получения правильного xml. Есть ли лучший способ сделать это, чтобы упростить этот сложный уровень переформатирования ввода json? xml2 js может преобразовать это:

{
    "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>

Пожалуйста, дайте мне знать, работали ли вы над аналогичными требованиями. Ценю любую помощь. Спасибо.

Ответы [ 2 ]

1 голос
/ 29 мая 2020

Это может быть способ вернуть объект в формат, ожидаемый в библиотеке, хотя предполагается, что все ключи, не являющиеся объектами, должны быть атрибутами (это допустимое предположение для вашего приложения?)

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 голосов
/ 29 мая 2020

вы можете использовать эту библиотеку: введите здесь описание ссылки

Вот так:

  let xmlJ=require('xml-js');
  let parseToJson=(xml)=>{
        return new Promise(resolve => {
              let convert;

              convert=xmlJ.xml2json(xml,{compact:true});
              resolve(convert);

   });
 };
...