Объект, созданный из цикла в JavaScript, как анализировать их в формате json - PullRequest
0 голосов
/ 01 июля 2018

Я новичок в Javascript, и мне нужно проанализировать JavaScript-объект, сгенерированный в цикле, чтобы сохранить один параметр и сохранить этот параметр для всех объектов, сгенерированных в цикле.

Это моя программа

var onvif = require('onvif');
var fs = require('fs');

var nombrecamera=0;
var taille=0;
var test ='';

function sleep (time) {
    return new Promise((resolve) => setTimeout(resolve, time));
}

var STREAM = fs.createWriteStream('STREAM.txt',{flags:'r+'});

onvif.Discovery.on('device', function(cam,rinfo,xml){
    // function will be called as soon as NVT responses
    nombrecamera+=1;
    console.log(cam);
    test += cam;
    cam2= JSON.stringify({cam}, null  , ' ');
    //console.log(cam2);
    STREAM.write(cam2);
    console.log(test);
});

onvif.Discovery.probe({timeout:1000,resolve:false});

И в выводе в моем примере у меня есть 4 из них:

{ probeMatches:
   { probeMatch:
      { endpointReference: [Object],
        types: 'tdn:NetworkVideoTransmitter',
        scopes: ' onvif://www.onvif.org/type/video_encoder     onvif://www.onvif.org/location/country/china onvif://www.onvif.org/type/network_video_transmitter onvif://www.onvif.org/hardware/IPC-122     onvif://www.onvif.org/Profile/Streaming onvif://www.onvif.org/name/IPC-BO',
        XAddrs: 'http://192.168.1.81:10004/onvif/device_service',
        metadataVersion: 1 
      } 
   } 
}

И я хочу сохранить только XAddrs для всех сгенерированных объектов, а затем поместить их в json.

Моя первая идея состояла в том, чтобы структурировать этот объект, затем создать записываемый поток и соединить все json вместе, но в этом случае между json нет комы, поэтому он не создает большой json со всеми данными.

Спасибо за вашу помощь

Jules

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Самый простой способ узнать, сколько у вас адресов - это функция .length массива.

Поскольку я не знаю, нужен ли вам список с уникальными адресами или один и тот же адрес может появляться несколько раз, я покажу вам оба решения.

Только уникальные адреса

function extract() {
    test.forEach(cam => {
       const deviceAddress = cam.probeMatches.probeMatch.XAddrs;

       // only if the xaddrs is not in list yet, add it
       if(test.filter(xad => xad === deviceAddress).length <= 0) {
           xaddrs.push(cam.probeMatches.probeMatch.XAddrs);
       }
    }); 

    // show the number of addresses
    const listCount = xaddrs.length;
    console.log('listCount: ', listCount);
}

Нет уникального адреса

function extract() {
    test.forEach(cam => {
       xaddrs.push(cam.probeMatches.probeMatch.XAddrs);
    }); 

    // show the number of addresses
    const listCount = xaddrs.length;
    console.log('listCount: ', listCount);
}
0 голосов
/ 01 июля 2018

Создайте test массив и push() cam объекты в нем. Также определите массив для ваших значений XAddrs.

var test = [];
var xaddrs = [];

// your other code
...

onvif.Discovery.on('device', function(cam,rinfo,xml){
    // function will be called as soon as NVT responses
    nombrecamera+=1;
    console.log(cam);

    // push cam object into array
    test.push(cam);

    cam2= JSON.stringify({cam}, null  , ' ');
    //console.log(cam2);
    STREAM.write(cam2);
    console.log(test);
});

Затем извлеките XAddrs и поместите его в массив xaddrs.

function extract() {
    test.forEach(cam => {
       xaddrs.push(cam.probeMatches.probeMatch.XAddrs);
    }); 

    // now you have an array containing only the XAddrs elements
    console.log(xaddrs);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...