Тонкое манипулирование данными в объекте javascript массивов с одним значением - PullRequest
0 голосов
/ 24 мая 2018

У меня есть уникальная проблема, которую я пытаюсь решить с помощью какого-то сложного кода JavaScript.К вашему сведению, я использую MongoDB, NodeJS, ExpressJS и VueJS в качестве своего технологического стека.

Я пишу приложение, которое выполняет вызовы api моему внешнему партнеру, который возвращает огромный файл данных на основе xml.(К сожалению, они не могут отправлять данные в формате JSON).Получив от них данные, я запускаю их с помощью команды parseString библиотеки xml2js.Но то, как он отправляет код обратно, действительно странно.Со стороны это выглядит хорошо, это массив объектов: [{object1}, {object2}, .... {objectN}].но когда вы смотрите на отдельные объекты, они странно форматируют данные:


    object1 = {
       key1: [ 'string' ],
       key2: [ '01234657' ],
       key3: [ 'email@email.com' ],
       key4: [{ 
             key5: [ '8372655573' ],
             key6: [ '25.00' ],
             key7: [ 'description of item purchased' ]
             }],
       key8: [ 'otherData' ],
// .......and so on until
       NthKey: [ 'dataType' ]    
    }

Я ожидал, что большая часть данных, которые я собирался получить, будет состоять из одного ключадля отдельных пар значений данных, с несколькими исключениями.Но для каждого отдельного ключа возвращаемого объекта из parseString они присваивают значение массиву в виде строки, несмотря ни на что.И для случаев, когда в ключ вводится куча разных типов данных (например, с помощью key4 в приведенном выше примере), мне приходится копаться не только в массиве, но и во вложенном объекте внутри этого массива, и вотдельные ключи, которые связаны с моими данными ..... Я нахожу это действительно странным и трудным для работы, потому что теперь мне нужно создать несколько циклов, которые проходят и создают в основном точную копию объекта 1, за исключением того, что он выглядиткак это:


    object1CarbonCopy = {
        key1: String,
        key2: Number,
        key3: email,
        key4: {
            key5: Number,
            key6: Number,
            key7: String 
        },
        key8: String
// and so on until........
        NthKey: 'dataType'
    }

Есть ли у кого-нибудь из вас советы по коду, который может это сделать?или, если есть настройки / опции, которые я могу передать в xml2js, чтобы изменить способ вывода данных?Любой совет будет очень признателен.

1 Ответ

0 голосов
/ 25 мая 2018

Итак, сегодня я усвоил ценный урок, иногда вам нужно читать документы несколько раз, потому что вы что-то упускаете.Оказывается, есть опция, которая отключает автоматическую вставку мусора в массив:

parser = new xml2js.Parser( {explicitArray: false} );

Если вы просматриваете этот вопрос и не знаете, в чем проблема, передайте {явный_катол: ложь} какпараметр вашего конструктора Parser

...