Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Object created from a loop in JavaScript, how to analyse them in a json

I'm a begginer in Javascript and I need to analyse a JavaScript Object generated in a loop to keep one parameter and to save this parameter for all object generated in the loop.

This is my program

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

And in output in my example i've got 4 of these:

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

And I want to keep only the XAddrs for all object generated and then put these in a json.

My first idea was to stringify this object then create a writable stream and put all json together but in this case there are no coma between the json so it doesn't create a big json with the whole data.

Thank you for your help

Jules

like image 780
Jules Lecoustre Avatar asked May 08 '26 20:05

Jules Lecoustre


1 Answers

The easiest way to know how many addresses you have is the .length function of an array.

As I don't know whether you need a list with unique addresses or the same address can show up multiple times, I'm gonna show you both solutions.

Unique Addresses Only

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

No Unique Address

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

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

Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!